LeetCode之19. 刪除鏈表的倒數第N個節點

19. 刪除鏈表的倒數第N個節點(https://leetcode-cn.com/probl...

給定一個鏈表,刪除鏈表的倒數第 _n _個節點,而且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.node

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        //要刪除的節點
        ListNode temp=head;
        //找到要刪除的節點判斷條件
        ListNode cur=head;
        //要刪除節點的前置節點
        ListNode pre=null;
        //記錄何時雙節點開始同時移動
        int pos=1;
        while(cur.next!=null){
            //當n比cur節點的位置座標小時(從1開始計數),要刪除的節點指針開始移動。等cur節點的下個節點爲空時,指針2恰好找到刪除節點。
            if(pos>=n){
                pre=temp;
                temp=temp.next;
            }
            pos++;
            cur=cur.next;
        }
        if(pre==null){
            //當刪除的是第一個節點時,直接返回第二個節點便可
            return head.next;
        }
        //不然刪除temp節點
        pre.next=temp.next;
        return head;
    }
}
相關文章
相關標籤/搜索