請編寫乙個函式,使其可以刪除某個鍊錶中給定的(非末尾)節點,你將只被給定要求被刪除的節點。現有乙個鍊錶 – head = [4,5,1,9],它可以表示為:
示例 1:
輸入: head = [4,5,1,9], node = 5 輸出: [4,1,9] 解釋: 給定你鍊錶中值為 5
的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9. 示例 2:
輸入: head = [4,5,1,9], node = 1 輸出: [4,5,9] 解釋: 給定你鍊錶中值為 1
的第三個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 5 -> 9.
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
else}}
;
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。快慢指標,找到節點後和第一題一樣示例:給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5. 說明:
給定的 n 保證是有效的。
高階:你能嘗試使用一趟掃瞄實現嗎?
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
if(n==2)
}while
(n >0)
}while
(fast-
>next!=
null
) slow-
>next = slow-
>next-
>next;
return head;}}
;
反轉乙個單鏈表。利用3根指標諸位反轉示例:輸入: 1->2->3->4->5->null 輸出: 5->4->3->2->1->null 高階:
你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
listnode* mid = head-
>next;
listnode* left = head;
listnode* right = head-
>next-
>next;
left-
>next =
null
;while
(right-
>next!=
null
) mid-
>next = left;
right-
>next = mid;
return right;}}
;
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。有點歸併排序那意思了示例:輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
else
listnode* temp=res;
while
(l1!=
null
||l2!=
null)if
(l2==
null)if
(l1-
>val >= l2-
>val)
else
}return res;}}
;
請判斷乙個鍊錶是否為回文鍊錶。利用棧和快慢指標實現,如果要做到o(1)的空間複雜度,需要翻轉後半部分的鍊錶,改變原資料。示例 1:
輸入: 1->2 輸出: false 示例 2:
輸入: 1->2->2->1 輸出: true 高階: 你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
stack<
int> help;
while
(slow!=
null
)while
(!help.
empty()
)return
true;}
};
給定乙個鍊錶,判斷鍊錶中是否有環。經典問題,快慢指標為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是
-1,則在該鍊錶中沒有環。
示例 1:
輸入:head = [3,2,0,-4], pos = 1 輸出:true 解釋:鍊錶中有乙個環,其尾部連線到第二個節點。
示例 2:
輸入:head = [1,2], pos = 0 輸出:true 解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。
示例 3:
輸入:head = [1], pos = -1 輸出:false 解釋:鍊錶中沒有環。
高階:你能用 o(1)(即,常量)記憶體解決此問題嗎?
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
while
(fast!=slow)
;return
true;}
};
leetcode初級演算法 鍊錶
題目源自leetcode,方法都是自 cai 己 ji 寫的,可能比較符合菜雞們的思路 鍊錶是做到現在,感覺自己最拉垮的一節,資料結構真的都還給老師了 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點。傳入函式的唯一引數為 要被刪除的節點 示例 1 輸入 head 4,5,1,9 node...
LeetCode 初級演算法 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...
LeetCode初級演算法之鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路一 借助外來的空間 這個題我的初步思路是借助外來的空間,也就不是o 1 的空間複雜度,那麼這個就比較簡單了,只...