剑指offer第五十六题。
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题思路
我的解题思路就是新建一个头节点,因为最极端的情况是,全部都相等,不搞一个新结点处理起来会比较麻烦。当遇到当前结点curr
等于下一个节点curr.next
的时候,则保存curr.val
为val
,拿这个值不停地与curr.next
的值比较,找出一串等于curr.val
的结点(因为是排序的,所以相等的肯定聚集在一起),直到curr.next.val != val
的值,此时curr = curr.next
,dummy.next = curr
即可,这一串等于val
的值就全部删除掉了。
我的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class Solution { public ListNode deleteDuplication(ListNode pHead) { ListNode dummy = new ListNode(0); dummy.next = pHead; ListNode curr = pHead; ListNode newHead = dummy; if(pHead == null || pHead.next == null){ return pHead; } while(curr!=null && curr.next != null){ if(curr.val != curr.next.val){ curr = curr.next; dummy = dummy.next; }else{ int val = curr.val; while(curr.next != null && val == curr.next.val){ curr = curr.next; } curr = curr.next; dummy.next = curr; } } return newHead.next; } }
|