劍指offer-----刪除連結串列中的重複節點
1、題目描述
在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5。
2、思路
需要兩個指標,一個指向前一個節點preNode,另一個指向當前節點node,如果遇到相等的節點,node向後移動,preNode不動,存下node.val方便後面的比較,直到遇到node和node.next不相等,preNode就可以指向node.next
注意:連結串列開頭可能就開始有重複的節點,所以預設preNode=null,在後面的給preNode賦值的時候,若preNode為null,那就把pHead設定為node.next
3、程式碼實現
/**
將所有的重複節點都刪除掉
*/
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null){
return null;
}
ListNode node = pHead;
ListNode preNode = null;
while(node != null){
ListNode pNext = node.next;
boolean needDelete = false;
if(pNext!=null && node.val==pNext.val){
needDelete = true;
}
if(!needDelete){
preNode = node;
node = node.next;
}else{
ListNode toBeDelete = node.next;
while(toBeDelete!=null && node.val==toBeDelete.val){
toBeDelete = toBeDelete.next;
}
node = toBeDelete;
if(preNode == null){
pHead = node;
}else{
preNode.next = node;
}
}
}
return pHead;
}
}
/**
將每組重複節點只留一個
*/
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null){
return null;
}
ListNode node = pHead;
ListNode preNode = null;
while(node != null){
ListNode pNext = node.next;
boolean needDelete = false;
if(pNext!=null && node.val==pNext.val){
needDelete = true;
}
if(!needDelete){
preNode = node;
node = node.next;
}else{
ListNode toBeDelete = node;//(1)
while(toBeDelete.next!=null && node.val==toBeDelete.next.val){ //(2)
toBeDelete = toBeDelete.next; //只有(1)和(2)兩部分與上面的程式碼不一樣
}
node = toBeDelete;
if(preNode == null){
pHead = node;
}else{
preNode.next = node;
}
}
}
return pHead;
}
}
相關文章
- 牛客(刪除連結串列中重複節點)
- JZ76 刪除連結串列中重複的節點
- 劍指offer:刪去連結串列中重複的節點。(題解原始碼加圖解)原始碼圖解
- JZ-056-刪除連結串列中重複的結點
- leetcode----刪除連結串列中的節點LeetCode
- 0928面試小節:刪除有序連結串列中的重複元素面試
- 【連結串列問題】刪除單連結串列的中間節點
- 從未排序的連結串列中刪除重複項排序
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- 力扣-83. 刪除排序連結串列中的重複元素力扣排序
- 83. 刪除排序連結串列中的重複元素(JavaScript版)排序JavaScript
- leetcode-82:刪除排序連結串列中重複的元素-iiLeetCode排序
- 資料結構實驗之連結串列七:單連結串列中重複元素的刪除資料結構
- LeetCode每日一題:刪除連結串列中的節點(No.237)LeetCode每日一題
- 【連結串列問題】打卡2:刪除單連結串列的第 K個節點
- 小影片平臺原始碼,刪除連結串列中重複的結點應該這樣做原始碼
- 2024/11/27 【連結串列】LeetCode 24 兩兩交換連結串列中的節點 & LeetCode 19 刪除連結串列的倒數第N個節點LeetCode
- 劍指 Offer 35. 複雜連結串列的複製
- 【連結串列問題】打卡8:複製含有隨機指標節點的連結串列隨機指標
- 0011 刪除連結串列的倒數第N個節點
- 13. O(1)時間刪除連結串列節點
- (c語言實現)刪除有序連結串列中重複出現的元素C語言
- 劍指offer——連結串列中倒數第k個結點
- 刪除連結串列中等於給定值 val 的所有節點。
- 力扣 - 劍指 Offer 22. 連結串列中倒數第k個節點力扣
- **24. 兩兩交換連結串列中的節點****19.刪除連結串列的倒數第N個節點****面試題 02.07. 連結串列相交****142.環形連結串列II**面試題
- 劍指Offer-38-兩個連結串列的第一個公共節點
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- LeetCode- 19 刪除連結串列的倒數第N個節點LeetCode
- 題19. 刪除連結串列的倒數第N個節點
- Leetcode No.19 刪除連結串列的倒數第N個節點LeetCode
- 【劍指offer】【3】輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
- Day 4 | 24. 兩兩交換連結串列中的節點 、 19.刪除連結串列的倒數第N個節點 、面試題 02.07. 連結串列相交 、142.環形連結串列II面試題
- 【LeetCode】【連結串列】劍指 Offer 52. 兩個連結串列的第一個公共節點 思路解析和程式碼LeetCode
- 2020-10-18 刪除連結串列的倒數第N個節點
- 讓我們一起啃演算法----刪除排序連結串列中的重複元素演算法排序
- 第四天:● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II面試題
- JZ-069-在 O(1) 時間內刪除連結串列節點