給定一個鏈表,刪除鏈表的倒數第 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% 的用戶
還有優化空間