1. 程式人生 > 其它 >LeetCode刪除連結串列的倒數第 N 個結點

LeetCode刪除連結串列的倒數第 N 個結點

技術標籤:演算法leetcode單鏈表java

LeetCode刪除連結串列的倒數第 N 個結點

題目

給你一個連結串列,刪除連結串列的倒數第 n 個結點,並且返回連結串列的頭結點。

進階:你能嘗試使用一趟掃描實現嗎?

img

示例 1:

輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]

實現思想

1:簡單粗暴,直接求長度,再數末位元素。

2:用兩個指標同時遍歷,中間相隔n位(倒數第n),快指標先到null時,慢指標就是要刪除的。相當於空間換時間。

實現程式碼

第一種

/**

 \* Definition for singly-linked list.

 \* public class ListNode {

 \*     int val;

 \*     ListNode next;

 \*     ListNode() {}

 \*     ListNode(int val) { this.val = val; }

 \*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }

 \* }

 */
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;
} }

第二種下次再補上