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

2021-09-25 18:01:11 字數 1412 閱讀 5929

刪除鍊錶中重複的節點:在乙個排序的鍊錶中,如何刪除重複的節點?已知鍊錶的節點是

1->2->3->3->4->4->5 ,刪除重複的鍊錶節點。鍊錶變成了 1->2->5

如果鍊錶為空,或者只有乙個結點,直接返回。

如果鍊錶結點大於等於2,則比較當前結點和下乙個結點是否相同,如果相同,則刪除當前結點和下乙個結點,比較下下個結點是否和當前結點相同,如果相同繼續刪除,直至與當前結點不同。

返回煉表表頭是第乙個不重複結點,需要乙個前驅結點prenode記錄不重複鍊錶,其next應該初始為null,如果有下乙個不重複結點,則next是下乙個不重複結點。

public class listnode 

}

package com.offer.test;

import com.lintcode.node.listnode;

/**

* 刪除鍊錶中重複的節點

* 1.如果鍊錶為空,或者只有乙個結點,直接返回

* 2.如果鍊錶結點大於等於2,則比較當前結點和下乙個結點是否相同,如果相同,則刪除當前結點和下乙個結點,比較下下個結點是否和當前結點相同,如果相同繼續刪除,直至與當前結點不同\

* 3.返回煉表表頭是第乙個不重複結點,需要乙個前驅結點prenode記錄不重複鍊錶,其next應該初始為null,如果有下乙個不重複結點,則next是下乙個不重複結點。

* * 煉表形如如下的方式:1->2->3->3->4->4->5

* 刪除重複的鍊錶節點是 1->2->5

* @author [email protected]

* @date 2023年6月18日 下午5:30:40

*/public class deleteduplication

listnode root = new listnode(0); // 定義乙個指向頭結點的節點,沒有實際的意義,僅僅用於記錄頭結點的

root.next = head; // 頭結點指向鍊錶的第乙個節點

listnode pre = root;

listnode cur = head;

while (cur != null)

pre.next = cur.next; // 當前節點的前驅節點的下乙個節點指向當前節點的下乙個節點,表示刪除當前節點。

} else

cur = cur.next;// 繼續判斷下乙個節點

} return root.next;// 返回鍊錶的第乙個節點 }

public static void main(string args) else

} }}

劍指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 遞迴 遞迴的方法就像是先判斷第乙個節點和之後的節...