題目描述
在一個排序的鏈表中,存在重復(fù)的結(jié)點渠概,請刪除該鏈表中重復(fù)的結(jié)點茶凳,重復(fù)的結(jié)點不保留,返回鏈表頭指針播揪。 例如慧妄,鏈表1->2->3->3->4->4->5 處理后為 1->2->5
知識點
鏈表
Qiang的思路
對于這個問題,我們可以設(shè)置三個指針剪芍,一個遍歷鏈表塞淹,判斷每一個位置是不是重復(fù),另一個指向第一個指針的上一個元素罪裹,目的是當(dāng)?shù)谝粋€指針指向的元素和其后的元素重復(fù)的時候饱普,我們直接讓第二個指針指向下一個不重復(fù)的節(jié)點运挫,這樣就把中間的節(jié)點全部刪除掉了。顯然套耕,下一個不重復(fù)的節(jié)點就需要第三個指針指向谁帕,這是因為該節(jié)點從第一個節(jié)點開始,往后遍歷判斷其后有沒有重復(fù)的冯袍,這樣就會停在第一個不重復(fù)的節(jié)點上了匈挖。
按照這個思路,我們設(shè)置了三個指針康愤,當(dāng)?shù)谝粋€指針遍歷時儡循,起始位置應(yīng)該第一個節(jié)點,但由于第二個指針需要有指向征冷,所以我們將起始位置設(shè)置為第二個節(jié)點择膝,這樣就無法考慮第一個節(jié)點了,顯然就有一個問題检激,如果當(dāng)?shù)谝粋€節(jié)點就是重復(fù)的時候肴捉,我們的策略需要將其單獨考慮。但是實際上并不需要叔收,我們可以增加一個頭節(jié)點齿穗,將該頭結(jié)點取值設(shè)置為空,然后從真實的第一個節(jié)點開始遍歷饺律,就能不用考慮這種特殊情況了缤灵。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplication(self, pHead):
# write code here
result=ListNode(None)
result.next=pHead
before=result
while pHead!=None:
after=pHead.next
flag=False
while after!=None and pHead.val==after.val:
flag=True
after=after.next
if flag==True:
before.next=after
else:
before=before.next
pHead=after
return result.next
作者原創(chuàng),如需轉(zhuǎn)載及其他問題請郵箱聯(lián)系:lwqiang_chn@163.com蓝晒。
個人網(wǎng)站:https://www.myqiang.top腮出。