版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a786150017/article/details/82956109
19. Remove Nth Node From End of List
题目描述
移除链表的倒数第n个结点
例子
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的取值范围是1-链表长度,边界为n=1和n=链表长度
[思路] - 要求移除倒数第n个,考虑双指针:指针1先移动n+1步,指针2再移动(指针1指向None时,指针2刚好指向倒数第n+1个结点)
[改进] - 对于边界n=链表长度时,指针1移动n+1会报错。在开头定义一个dunmmy结点
解法1
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
p = head
for _ in range(n+1):
if not p: # 边界-正数第一个结点
return head.next
p = p.next
q = head
while p:
p = p.next
q = q.next
q.next = q.next.next
return head
改进: 开头定义一个dummy结点
class Solution(object):
def removeNthFromEnd(self, head, n):
dummy = ListNode(-1)
dummy.next = head
p = dummy
for _ in range(n+1):
p = p.next
q = dummy
while p:
p = p.next
q = q.next
q.next = q.next.next
return dummy.next