樣例
給出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...