LeetCode
題目: 刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn)
給定一個(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.
說(shuō)明:
給定的 n 保證是有效的嘱腥。
方案:
構(gòu)建雙指針first與sec,first先走n步拘悦,然后一同運(yùn)動(dòng)齿兔,當(dāng)first指向表尾,sec指向的next即是倒數(shù)第N個(gè)節(jié)點(diǎn),刪除即可(next指向next的next分苇,這里的刪除相當(dāng)于跳過(guò))添诉。
代碼:
/**
* Definition for singly-linked list.
* public class ListNode {
* public var val: Int
* public var next: ListNode?
* public init(_ val: Int) {
* self.val = val
* self.next = nil
* }
* }
*/
class Solution {
func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
var first = head
for _ in 0..<n {
first = first?.next
}
if first == nil {
return head?.next
}
var sec = head
while first?.next != nil {
first = first?.next
sec = sec?.next
}
sec?.next = sec?.next?.next
return head
}
}