链表:虚拟头节点

链表:虚拟头节点

题目:203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点。

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

思路

链表操作的两种方式:

  • 直接使用原来的链表来进行删除操作
  • 设置一个虚拟头结点在进行删除操作

移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。

设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除了。

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummyHead = new ListNode(0); // 设置一个虚拟头结点
        dummyHead.next = head; // 将虚拟头结点指向head,这样方面后面做删除操作
        ListNode cur = dummyHead;

        while (cur.next != null) {
            if(cur.next.val == val) {
                ListNode tmp = cur.next;
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }
        return dummyHead.next;
    }
}
posted @ 2021-03-25 20:32  当康  阅读(235)  评论(0)    收藏  举报