給定一個(gè)鏈表芹枷,刪除鏈表的倒數(shù)第 n 個(gè)節(jié)點(diǎn)疏旨,并且返回鏈表的頭結(jié)點(diǎn)上荡。
示例:
給定一個(gè)鏈表: 1->2->3->4->5, 和 n = 2.
當(dāng)刪除了倒數(shù)第二個(gè)節(jié)點(diǎn)后,鏈表變?yōu)?1->2->3->5.
說明:
給定的 n 保證是有效的毅待。
進(jìn)階:
你能嘗試使用一趟掃描實(shí)現(xiàn)嗎尚卫?
思路--快慢指針
創(chuàng)建一個(gè)啞節(jié)點(diǎn)slowNode和fastNode ,將其指向head
先讓fastNode 先走n步
接著讓fastNode 和slowNode同時(shí)走尸红,當(dāng)fastNode 走到鏈表的尾部時(shí)吱涉,slowNode.next就是倒數(shù)第n個(gè)節(jié)點(diǎn)
刪除倒數(shù)第n個(gè)節(jié)點(diǎn):slowNode.next = slowNode.next.next
這里要特殊處理一下鏈表長度為1的情況
python3解法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
if not head: return head
slowNode = ListNode(None)
slowNode.next = head
fastNode = slowNode
step = 0
while step < n:
fastNode = fastNode.next
step += 1
while fastNode.next != None:
fastNode = fastNode.next
slowNode = slowNode.next
if slowNode.next == head:
head = head.next
else:
slowNode.next = slowNode.next.next
return head
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)外里,非商業(yè)轉(zhuǎn)載請注明出處怎爵。