《劍指offer》 刪除鍊錶中重複的結點

2021-07-22 21:32:12 字數 687 閱讀 9772

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

解法:1.設定3個指標,乙個是當前p,乙個是前乙個ppre,乙個是後乙個pnext

2.刪除的時候,主要考慮到頭結點是否重複,所以分情況討論,先設定ppre為null

3.判斷是否重複,while(p != null && p->val==pnext->val),移動pnext

4.開始刪除結點,ppre->next = pnext,這裡需要判斷ppre是否為空,若不為空則執行前面;若為空,則是頭結點也被刪除了,此時重新設定phead=null

5.不用刪除結點,同理判斷ppre是否為空(這裡面第一次肯定會執行),若為空,則設定頭結點phead=p,方便於重新構建鍊錶;其餘,都要執行移動,ppre = p;

6.最後不管是不是刪除結點,p肯定要移動指向下乙個結點,p=pnext;

總體來說,在思考的過程中,不知道如何處理頭結點也被刪除的情況,這裡比較巧妙,用了開始設定為空來進行判斷,分為刪除和不刪除結點兩種情況來討論。

class solution 

if(flag)

else

p = pnext;

}return phead;

}};

劍指offer 鍊錶 刪除鍊錶中的重複節點

題目在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 思路分析 思路一 使用linkedlist儲存不重複節點,重構鍊錶 分析評價 這個方法是乙個比較直接且容易想到的方法,使用時只要注意一些情況...

劍指offer 刪除鍊錶中重複的結點(鍊錶)

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 class solution listnode ans newlistnode 1 ans next phead listnode link a...

劍指Offer 鍊錶 刪除鍊錶中重複的結點

題目 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。注意該鍊錶為排序鍊錶,重複的節點不保留哦!public class listnode 1 遞迴 遞迴的方法就像是先判斷第乙個節點和之後的節...