一、
由于单向链表的特性是不好直接找出某个节点的上一个节点。所以在解决算法问题的时候将链表节点存入某种数据结构再通过对该数据结构(比如栈,集合,哈希)进行访问即可直接找出某个节点的上一个节点。
二、
对于涉及到对链表头结点的删除或者在其之前插入的问题,请务必设置一个虚拟头结点
ListNode dummy;并且注意,在最后return dummy.next 而不是 return head;
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy=new ListNode(-1,head);
ListNode pre=dummy;
ListNode curr=head;
while(curr!=null&&curr.next!=null){
if(curr.val==curr.next.val){
ListNode temp=curr.next;
while(temp.next!=null&&temp.next.val==curr.val)
temp=temp.next;
pre.next=temp.next;
curr=pre.next;
}
else{
pre=curr;
curr=curr.next;
}
}
return dummy.next;
}