MySQL學習筆記:十五、儲存過程與函式
阿新 • • 發佈:2021-12-15
兩次遍歷
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { /** * 兩次遍歷 * 先得到連結串列的長度,再正向遍歷到length - n的位置,也就是待刪除節點的前一個節點 */ ListNode dummyHead = new ListNode(0, head); ListNode cur = dummyHead.next; int length = 0; while (cur != null){ length++; cur = cur.next; } ListNode prev = dummyHead; for (int i = 0; i < length - n; i++) { prev = prev.next; } prev.next = prev.next.next; return dummyHead.next; } } /** * 時間複雜度 O(n) * 空間複雜度 O(1) */
雙指標
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { /** * 一次遍歷(雙指標) * right先右移,當兩個指標的區間長度為n時,再一起移動,直到right == null,此時left指向為待刪除節點 */ ListNode dummyHead = new ListNode(0, head); ListNode left = dummyHead; ListNode right = dummyHead.next; for (int i = 0; i < n; i++) { right = right.next; } while (right != null){ left = left.next; right = right.next; } left.next = left.next.next; return dummyHead.next; } } /** * 時間複雜度 O(n) * 空間複雜度 O(1) */
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/