刪除鍊錶連續重複的節點

2021-09-25 17:24:06 字數 1418 閱讀 7983

題目:刪除鍊錶中連續重複的節點。

核心方法,首先判定鍊錶不為空或只有乙個節點

宣告前一節點和當前節點,

乙個標誌位判斷是否需要刪除該節點

當當前節點不為最後乙個節點且當前節點的值等於下一節點的值時,標誌位變為真

如果標誌位為假,上一節點和當前節點都向後移

標誌位為真,需要刪除當前節點和下一節點時,判斷再下一節點是否相同

如果頭節點相同,刪除頭節點,相同的節點都躍過去,和不同的節點進行關聯

新的節點可能還會出現重複,所以需要從新判斷。

package com.helan.c;

public class deletenode2

}public static listnode deletenode2(listnode head)

listnode prenode=null;

listnode curnode=head;

while(curnode!=null)//3 4 5 5 5 6 cur=5 pre=4

listnode todel= curnode.next;

if(!ifdel)else //判斷當頭節點就是要刪除的節點時

if(prenode==null)else }}

return head;

}void test(listnode phead)

system.out.println(curr.val);

}else

phead=deletenode2(phead);

system.out.print("the result list is: ");

curr=phead;

if(curr!=null)

system.out.println(curr.val);

}else

system.out.println("-----------");

}/**

* 重複結點位於鍊錶頭部

*/void test1()

/*** 重複結點位於鍊錶尾部

*/void test2()

/*** 重複結點位於鍊錶中部

*/void test3()

/*** 連續出現重複結點

*/void test4()

/*** 多個重複結點

*/void test5()

/*** 無重複結點

*/void test6()

/*** 單個結點

*/void test7()

/*** null

*/void test8()

public static void main(string args)

}

那個標誌位在while迴圈裡面,不要寫錯了t-t

刪除鍊錶的重複節點

思路 就是找到不重複出現的節點,然後連線到新鍊錶上面 反思 在連線節點到新鍊錶的時候,每次都要把尾部節點的next指標設定為空!以防當前尾部節點真的是最後乙個節點卻沒給next設定指標域為空 struct listnode class solution listnode temp pnode 此時指...

鍊錶的重複節點刪除

題目一 力扣83 刪除重複的節點 保留重複的節點 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3 解法1 使用set去重,思路很簡單。時間複雜度o n 空間複雜度o n public sta...

鍊錶(刪除重複的節點)

題目要求 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 題解 先判空和長度是否為一 定義兩個指標和乙個傀儡節點 用cur當游標遍歷鍊錶,當cur的值和cur.next的值相等時,prev不動...