[牛客題霸-研發] NC53-刪除連結串列的倒數第n個節點
阿新 • • 發佈:2021-02-07
[牛客題霸-研發] NC53-刪除連結串列的倒數第n個節點
----------------------------------------------本題連結----------------------------------------------
題目描述
給定一個連結串列,刪除連結串列的倒數第n個節點並返回連結串列的頭指標
例如:
給出的連結串列為:1->2->3->4->5, n= 2.
刪除了連結串列的倒數第n個節點之後,連結串列變為1->2->3->5.備註:
題目保證n一定是有效的
請給出請給出時間複雜度為\ O(n) O(n)的演算法
示例
輸入
{1,2},2
返回值
{2}
思路
連結串列問題,快慢指標操作
快指標先走,讓快慢指標之間相隔n個節點
當快指標到達連結串列末尾,慢指標的下一個節點即為需要刪除的節點
需要注意的是,刪除節點為頭結點的情況
演算法過程
- 判斷異常情況
- 初始化快慢指標和虛擬頭指標
- 快指標先走n個節點
- 快慢指標一起走到末尾
- 刪除節點
- 輸出虛擬頭結點的下一個節點
解答
public class Solution {
/**
*
* @param head ListNode類
* @param n int整型
* @return ListNode類
*/
public ListNode removeNthFromEnd (ListNode head, int n) {
if(head == null || n == 0) return head;
ListNode dummy = new ListNode(-1), slow = dummy, fast = dummy;
dummy.next = head;
for(int i = 0; i < n; i++){
fast = fast.next;
}
while( fast.next != null){
slow = slow.next;
fast = fast.next;
}
slow.next = slow.next.next;
return dummy.next;
}
}