Java - 刪除鏈表中倒數第n個節點

給定一個鏈表,刪除鏈表中倒數第n個節點,返回鏈表的頭節點。


 注意事項

鏈表中的節點個數大於等於n

樣例

給出鏈表1->2->3->4->5->null和 n = 2.

刪除倒數第二個節點之後,這個鏈表將變成1->2->3->5->null.

挑戰 

O(n)時間複雜度


/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param head: The first node of linked list.
     * @param n: An integer.
     * @return: The head of linked list.
     */
    ListNode removeNthFromEnd(ListNode head, int n) {
        // write your code here
       
      ListNode p=head;
      ListNode q=head;
        for(int i=0;i<n;i++){
            p=p.next;
        }
        if(p==null){
            head=head.next;
            return head;
        }
        while(p.next!=null){
            p=p.next;
            q=q.next;
        }
        q.next=q.next.next;
        return head;
    
    }
}


思路很簡單,只有兩種出現的情況,1、鏈表的長度剛剛好等於n,也就是說刪除表頭節點,2、鏈表長度大於n,那麼我們先定義兩個表頭,一個後移n位,然後兩個鏈表同時後移
,這時當後面的節點到達尾部時,前面的節點就是刪除的節點的前一個節點。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章