LeetCode#19-刪除鏈表的倒數第n個節點

給定一個鏈表,刪除鏈表的倒數第 個節點,並且返回鏈表的頭結點。

示例:

給定一個鏈表: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.

說明:

給定的 n 保證是有效的。

進階:

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

這個題去年就聽面試的學長提過了,當時就沒能馬上反應過來一次遍歷的方法,今天實際上做的時候也出了一些bug。這兩天發現做鏈表最好在頭部使用啞結點,對於某些情況下如原鏈表的頭結點比較好操作。

/**
 * 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 dummy=new ListNode(0);
        dummy.next=head;
        
        ListNode cur=dummy;
        ListNode cur2=dummy;
        
        while(n>=0){
            cur=cur.next;
            n--;
        }
        
        while(cur!=null){
            cur=cur.next;
            cur2=cur2.next;
        }
        
        cur2.next=cur2.next.next;
        return dummy.next;
        
    }
}

 執行用時: 15 ms, 在Remove Nth Node From End of List的Java提交中擊敗了69.62% 的用戶

還有優化空間

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