网站建设售后服务承诺书,襄樊网站推广,毕设网站建设,大连html5网站建设费用题目链接#xff1a;203. 移除链表元素 - 力扣#xff08;LeetCode#xff09;
给你一个链表的头节点 head 和一个整数 val #xff0c;请你删除链表中所有满足 Node.val val 的节点#xff0c;并返回 新的头节点 。
示例 1#xff1a;
输入#xff1a;head [1,2,6…题目链接203. 移除链表元素 - 力扣LeetCode
给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val val 的节点并返回 新的头节点 。
示例 1
输入head [1,2,6,3,4,5,6], val 6输出[1,2,3,4,5]
示例 2
输入head [], val 1输出[]
示例 3
输入head [7,7,7,7], val 7输出[]
用原来的链表操作
要删除的是curr.next
/*** 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) {//要删的是头结点while(head!nullhead.valval){ //用while不用if eg:1,1,1,1,1headhead.next;}//要删的不是头结点ListNode currhead; //定义一个临时指针指向head使用curr进行遍历避免修改headwhile(curr!nullcurr.next!null){if(curr.next.valval){curr.nextcurr.next.next;}else{currcurr.next;}}return head; //没有改变head}
}
设置一个虚拟头结点
要删除的是curr.next
/*** 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 dummyheadnew ListNode();dummyhead.nexthead; //虚拟头结点的下一个节点指向头结点headListNode currdummyhead; //定义一个临时指针指向虚拟头结点while(curr!nullcurr.next!null){if(curr.next.valval){curr.nextcurr.next.next;}else{currcurr.next;}}return dummyhead.next; // 头结点head可能已经被删除了dummyhead.next是新链表的头结点}
}
注意不能直接用虚拟头结点dummyhead遍历。
因为循环条件while(dummyhead!nulldummyhead.next!null)在处理链表的最后一个节点时可能会出现问题。当dummyhead.next为null时循环会停止但是如果最后一个节点的值等于val这个节点将不会被删除。