Remove Linked List Elements Remove all elements from a linked list of integers that have value val . Example Example 1: Input: head = 1-2-3-3-4-5-3-null, val = 3Output: 1-2-4-5-null Example 2: Input: head = 1-1-null, val = 1Output: null 思路
Remove Linked List Elements
Remove all elements from a linked list of integers that have value val
.
Example
Example 1:
Input: head = 1->2->3->3->4->5->3->null, val = 3 Output: 1->2->4->5->null
Example 2:
Input: head = 1->1->null, val = 1 Output: null
思路:
函数参数中的ListNode head是链表中的第一个节点。所以要先加入头节点dummy, 并使head变为头节点(line 4)。(头节点指向链表的第一个节点)
加入头节点有两个作用:
- dummy node 始终指向链表的第一个节点,这样返回整个链表只需要dummy.next
- head 作为头节点,使对链表第一个节点的操作(插入,删除等)和链表内其他节点相同,不用单独考虑第一个节点操作的特殊性。
注意:
line 10 一定要加else,否则可能抛出NullPointerException异常。比如
Input: head = 1->2->3->3->4->5->3->null, val = 3。
if语句要用准!
代码:
1 public ListNode removeElements(ListNode head, int val) { 2 ListNode dummy = new ListNode(0); 3 dummy.next = head; 4 head = dummy; 5 6 while (head.next != null){ 7 if (head.next.val == val) { 8 head.next = head.next.next; 9 } 10 else head = head.next; 11 } 12 return dummy.next; 13 }