1. 程式人生 > 其它 >每日一題-Day31-刪除連結串列的倒數第n個節點

每日一題-Day31-刪除連結串列的倒數第n個節點

雙指標

題目

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

示例:

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

解題思路

快慢指標:第一個指標先移動n個節點,然後兩個指標同時開始移動,當第一個指標移動到連結串列的結尾節點時,第二個節點移動到倒數第n+1個節點,此時利用連結串列的性質即可刪除倒數第n個節點

/**
 * 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 temp1 = head;
        ListNode temp2 = head;
        for (int i = 0; i < n; i++){
            temp1 = temp1.next;
        }
        if (temp1 == null) {
            return head.next;
        }else {
            while(temp1.next != null){
                temp1 = temp1.next;
                temp2 = temp2.next;
            }
            temp2.next = temp2.next.next;
        }
        return head;
    }
}

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/