雙層迴圈遍歷鍊錶刪除重複元素

2021-09-02 05:23:27 字數 1221 閱讀 4693

1. 刪除鍊錶中的重複元素,要求是不能夠使用緩衝區

由於題目要求了不能夠使用額外的空間來進行輔助我們找出重複的元素,即不能夠使用額外的資料結構來儲存元素,所以我們不能夠使用雜湊表(hashset)來輔助我們找出重複的元素了,但是我們可以普遍的做法:使用雙重迴圈來找出重複的元素

在鍊錶中一般是使用while迴圈而不使用for迴圈來遍歷元素

其中要使用到四個指標,第乙個指標first指向的是第一層for迴圈的當前元素,第二個指標second指向的是第二層for迴圈的當前元素,第三個指標p指向的是第二層for迴圈的當前元素的前乙個元素,因為我們要刪除重複的元素,關鍵是改變前乙個前驅指標的指向即可,把前乙個指標的next指向下乙個元素相當於就把重複的元素刪除了,第四個指標pre是第乙個指標的副本,用來在第二層for迴圈中將第一層迴圈的當前元素與第二層for迴圈的當前元素的元素值進行比較的,判斷是否相同

第一層for迴圈結束之後那麼我們應該將第乙個指標往下移動,改變指標p,second,pre的指向

我覺得最重要的是弄清楚指標的指向,假如指標不夠那麼應該加多乙個指標直到在迴圈中方便我們對元素進行操作

還有就是思路清楚之後需要在寫**的時候把自己想的與對應的**聯絡起來,每一句寫出來的**我們都應該做到心裡有數,這句**表示的是什麼意思

2. 畫出其中的指標指向圖

3. 因為使用了兩層for迴圈,那麼時間複雜度為o(n ^ 2), 具體的**如下:

public class main	}	

public static void main(string args) ;

//利用陣列生成鍊錶

listnode head = new listnode(null);

listnode p = head;

for(int i = 0; i < arr.length; i++)

removerepetition(head);

listnode p1 = head.next;

while(p1 != null)

} private static void removerepetition(listnode head)else

second = second.next;

}first = first.next;

} }}

鍊錶刪除重複元素1,刪除重複元素2,

刪除排序鍊錶中的重複元素 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3 思路 很簡單。先將兩個指標進行操作,start,end然後判斷end是否等於空即可 definition for s...

較 鍊錶刪除重複元素

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 這道題首先要注意,重複元素乙個不留,且開頭元素可能重複,所以如果我們直接在原煉表上操作會比較麻煩。這裡採用選擇非重複節點構建新鍊錶的方式進行刪除...

演算法 刪除鍊錶重複元素,只保留非重複元素

definition for singly linked list.public class listnode 核心思想 判斷當前節點是否需要刪除的方法是檢查當前節點是否與相鄰的前後節點相等。定義乙個fast指標來遍歷鍊錶 定義乙個prefast指標來記錄fast的前一位 定義乙個slow指標來記錄...