Description:
Remove all elements from a linked list of integers that have value val.

Example:

Input:  1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

题意:删除链表中值为LeetCode-Remove Linked List Elements_删除节点的那些节点;

解法:要删除一个节点LeetCode-Remove Linked List Elements_Linked List_02,我们需要知道这个节点的前一个节点LeetCode-Remove Linked List Elements_删除节点_03,通过改变指针的指向来删除节点LeetCode-Remove Linked List Elements_Linked List_02

  • temp = node.next
  • pre.next = node.next
  • node = temp

这里我们需要考虑到如果此时只有一个节点,并且二这个节点正式符合条件需要删除的节点,那么此时这第一个节点是没有前一个节点的,因此,为了将这种情况和其他情况以相同的方式解决,我们通过构造一个虚拟头节点,这样每个节点便都有前一个节点;

Java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode vHead = new ListNode(0);
vHead.next = head;
ListNode pre = vHead;
while (head != null) {
if (head.val == val) {
ListNode temp = head.next;
pre.next = head.next;
head = temp;
} else {
head = head.next;
pre = pre.next;
}
}
return vHead.next;
}
}