题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
分析:
-
如果链表为空,或者只有一个结点,直接返回
-
如果链表结点大于等于2,则比较当前结点和下一个结点是否相同,如果相同,则删除当前结点和下一个结点,比较下下个结点是否和当前结点相同,如果相同继续删除,直至与当前结点不同。
-
返回链表表头是第一个不重复结点,需要一个前驱结点prenode记录不重复链表,其next应该初始为NULL,如果有下一个不重复结点,则next是下一个不重复结点。
1 public class Solution { 2 public ListNode deleteDuplication(ListNode pHead) 3 { 4 if(pHead==null){ 5 return null; 6 } 7 8 ListNode root=new ListNode(0); 9 root.next=pHead; 10 ListNode preNode=root; 11 ListNode curNode=pHead; 12 while(curNode!=null){ 13 if(curNode.next!=null&&curNode.val==curNode.next.val){ 14 while(curNode.next!=null&&curNode.val==curNode.next.val){ 15 curNode=curNode.next; 16 } 17 preNode.next=curNode.next; 18 }else{ 19 preNode=curNode; 20 } 21 curNode=curNode.next; 22 } 23 return root.next; 24 } 25 }