解体思路
移除链表中的元素,如果是中间的还好例如a–>b–>c移除b,则a.next=b.next。倘若是第一个或者是最后一个这种就会很难以是实现,
解决:
(1)可以使用哨兵法,即新建一个哨兵节点sent,sent.next=head
(2)初始化两个指针 cur 和 prev 指向当前节点和前继节点。
(3)果说指针指向的值正好是要删除的值,也就是原链表的第一个元素,则cur.next=prev.next.
(4)否则令prev=cur并且cur=prev继续遍历
代码如下:
/**
* 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 sent=new ListNode(0);
sent.next=head;
ListNode prev = sent, cur = head;
while(cur !=null){
if(cur.val == val) prev.next=cur.next;
else
prev=cur;
cur=cur.next;
}
return sent.next;
}
}