普通方法
头节点要和其他节点分开考虑,因为头节点没有上一个节点,不能通过更改上一个结点的指针来达到删除节点的目的
所以要让下一个节点成为头节点,其余节点,通过更改上一个节点的next指针,指向next.next
class Solution {public ListNode removeElements(ListNode head, int val) {while(head != null && head.val==val){head = head.next;}ListNode cur = head;while(cur != null && cur.next != null){if(cur.next.val == val){cur.next = cur.next.next;}else{cur = cur.next;}}return head;}
}
虚拟头节点
设置一个虚拟头节点,头节点拥有前一个节点,使链表上所有节点的操作方式同一
class Solution {public ListNode removeElements(ListNode head, int val) {ListNode dummy = new ListNode();dummy.next = head;ListNode cur = dummy;while(cur.next != null){if(cur.next.val == val){cur.next = cur.next.next;}else{cur = cur.next;}}return dummy.next;}
}