/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode removeElements(ListNode head, int val) {
//要删除链表的结点就需要两个个指针往下去遍历链表,prevP是为了记录当前结点的前一个结点,p是为了记录当前结点
//为了方便为原链表建一个哨位结点,这样就能表示第一个结点的前一个结点
if(head == null) return null;
ListNode head1 = new ListNode(0);
head1.next = head;
ListNode prevP = head1;
ListNode p = head;
while(p != null){//循环中没有用到p.next.next,所以循环控制条件不用写while(p.next != null)
if(p.val == val){//每一次都是判断当前结点
prevP.next = p.next;
p = p.next;
}
else{//没有删除才正常移动
prevP = prevP.next;
p = p.next;
}
}
//循环中没有用到p.next.next,所以循环控制条件不用写while(p.next != null),也不用加下面这个了
/*//因为循环控制条件是while(p.next != null),所以最后还剩下一个单独的一个结点
if(p.val == val){
prevP.next = null;
}*/
return head1.next;
}
}leetcode [Remove Linked List Elements]//待整理多种解法
最新推荐文章于 2022-10-09 10:54:54 发布
本文介绍了一种删除链表中特定值节点的方法。通过使用额外的虚拟头节点简化边界情况处理,实现了双指针遍历链表的过程。文章提供了一个完整的Java实现示例。
7147

被折叠的 条评论
为什么被折叠?



