LintCode 刪除排序鍊錶中的重複元素

2021-07-10 22:48:23 字數 965 閱讀 3928

樣例

給出1->1->2->null,返回1->2->null

給出1->1->2->3->3->null,返回1->2->3->null

方法一:

很容易就想到一種遞迴的演算法,從頭結點head開始,比較head和後乙個節點的大小,如果相等,則把後乙個節點刪掉。然後繼續比較頭結點和下乙個節點。直到head和下乙個節點不相同,遞迴呼叫函式,比較下乙個節點和其後面節點的值。直到鍊錶尾部。

遞迴**如下:

class solution 

while ( p -> next != null ) else

}return head;

}};

方法二:關於鍊錶很容易想到使用2個指標(快慢指標)。定義2個指標p,q。剛開始都讓他們指向頭節點head。然後讓q指向下乙個節點,比較p,q節點的val值,如果相等,將q節點後移,刪除原來的q節點,繼續比較p,q;如果不相等,同時將p、q後移,繼續比較p、q的val值。直到q為空。(這裡迴圈結束的條件要注意,雖然q一直在向後移(q = q -> next),不能將迴圈結束的條件判斷為while(q -> next != null),如果這樣設定,在這麼一種情況下:1 1 2 5 5,最後時刻p指向倒數第二個5,q指向倒數第乙個5,此時q ->next = null,迴圈跳出,輸出1 2 5 5 ,並沒有完成任務)。

**如下:

listnode *p,*q;

p = head;

q = head;

if ( head == null )

q = p -> next;

while ( q != null ) else

}return head;

lintcode 鍊錶 刪除鍊錶中的元素

刪除鍊錶中等於給定值val的所有節點。給出鍊錶 1 2 3 3 4 5 3,和 val 3,你需要返回刪除3之後的鍊錶 1 2 4 5 判斷鍊錶是否為空,若是,返回null,若不是,進行下一步 判斷鍊錶第乙個結點是否為要刪除的結點,若是,將head指標向後移,若不是,無需操作 定義指標pre,判斷當...

LintCode 鍊錶排序

鍊錶排序 在 o n log n 時間複雜度和常數級的空間複雜度下給鍊錶排序。您在真實的面試中是否遇到過這個題?yes 樣例給出1 3 2 null,給它排序變成1 2 3 null.挑戰 標籤 相關題目 definition for listnode.public class listnode p...

lintcode 鍊錶排序

在 o n log n 時間複雜度和常數級的空間複雜度下給鍊錶排序。您在真實的面試中是否遇到過這個題?yes 樣例給出1 3 2 null,給它排序變成1 2 3 null.definition for listnode.public class listnode 思路 歸併排序 根據要求採用先so...