題目:刪除鍊錶中連續重複的節點。
核心方法,首先判定鍊錶不為空或只有乙個節點
宣告前一節點和當前節點,
乙個標誌位判斷是否需要刪除該節點
當當前節點不為最後乙個節點且當前節點的值等於下一節點的值時,標誌位變為真
如果標誌位為假,上一節點和當前節點都向後移
標誌位為真,需要刪除當前節點和下一節點時,判斷再下一節點是否相同
如果頭節點相同,刪除頭節點,相同的節點都躍過去,和不同的節點進行關聯
新的節點可能還會出現重複,所以需要從新判斷。
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不動...