劍指offer之刪除連結串列中重複的結點(Java實現)
阿新 • • 發佈:2018-12-26
刪除連結串列中重複的結點
題目描述:
在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列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;
}
}