LeetCode:19. Remove Nth Node From End of List
Given a linked list, remove the n-th node from the end of list and return its head.
Example:
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
题目的意思就是给定一个链表,删除倒数第n个结点,返回删除后的链表。
思路
很简单,使用两个哨兵指针,第一个先走,第二个等n步之后再走,这样当第一个走到最后一个结点的时候,第二个指针就处在倒数第n个结点处。当然在实现的时候注意几个特殊情况:一种是倒数第n个,其实就是第一个结点;另一种就是倒数第一个,它的下一个结点为空。
# 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:
former = head
latter = head
step = 0
if n == 1 and head.next == None:
return []
while former is not None:
print(former.val)
former = former.next
if step > n:
latter = latter.next
step+=1
if latter.next is not None:
if step > n:
tmp = latter
tmp.next = tmp.next.next
latter.next = tmp.next
if step == n:
head = latter.next
return head
时间复杂度很显然就是O(L),L是链表的长度。
当然也可以把倒数第n个转化为删除第L-n+1个结点的问题,这样需要先遍历一次链表得到长度之后再删除。
THE END.