[LeetCode] #19 刪除連結串列的倒數第 N 個結點
阿新 • • 發佈:2021-10-09
[LeetCode] #19 刪除連結串列的倒數第 N 個結點
給你一個連結串列,刪除連結串列的倒數第n
個結點,並且返回連結串列的頭結點。
輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]
先遍歷一遍獲得長度,再遍歷一遍找到要刪除的節點
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0, head); int length = getLength(head); ListNode cur = dummy;for (int i = 1; i < length - n + 1; ++i) { cur = cur.next; } cur.next = cur.next.next; ListNode ans = dummy.next; return ans; } public int getLength(ListNode head) { int length = 0; while (head != null) { ++length; head= head.next; } return length; } }
使用棧
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0, head); Deque<ListNode> stack = new LinkedList<ListNode>(); ListNode cur = dummy; while(cur != null) { stack.push(cur); cur = cur.next; } for (int i = 0; i < n; ++i) { stack.pop(); } ListNode prev = stack.peek(); prev.next = prev.next.next; ListNode ans = dummy.next; return ans; } }
只遍歷一次
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0, head); ListNode first = head; ListNode second = dummy; for (int i = 0; i < n; ++i) { first = first.next; } while (first != null) { first = first.next; second = second.next; } second.next = second.next.next; ListNode ans = dummy.next; return ans; } }
知識點:無
總結:無