1. 程式人生 > >劍指offer之刪除連結串列中重複的結點(Java實現)

劍指offer之刪除連結串列中重複的結點(Java實現)

刪除連結串列中重複的結點

NowCoder

題目描述:

在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5

###解題思路:

解法一:遞迴

public class Solution{
    public  ListNode deleteDuplication(ListNode pHead){
        if (pHead == null || pHead.next ==
null ) return pHead; //處理重複結點 if (pHead.val == pHead.next.val){ ListNode cur = pHead.next; while (cur != null && cur.val == pHead.val){ cur = cur.next; } return deleteDuplication(cur); } //該結點不重複,遞迴到下一個結點
pHead.next = deleteDuplication(pHead.next); return pHead; } }

解法二:非遞迴 三指標

public class Solution {
    public ListNode deleteDuplication(ListNode pHead){
        //設定一個頭結點,讓從一開始就節點重複更好操作
        ListNode first = new ListNode(-1);
        first.next = pHead;
        ListNode p =
pHead; ListNode last = first;//使用者刪除重複節點的節點 while (p != null && p.next != null) { if (p.val == p.next.val) { int val = p.val; while (p!= null&&p.val == val){ p = p.next; } last.next = p;//刪除重複節點 } else { last = p; p = p.next; } } return first.next; } }