问题分析:
在这里拆分成两个小问题:
-
- 删除链表节点 删除一个链表的结点,与三个节点有关系
pre.next=pre.next.next
-
- 结点位置是倒数第N个
当然可以遍历一遍链表得出链表总长度,然后找第n-1个节点然后进行删除。
这里更加推荐一次遍历使用双指针的思想,快慢指针,快指针始终比慢指针快n+1个节点。 当快指针为None时,此时慢指针在倒数第n+1个节点的位置,此时调用删除链表即可
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: Optional[ListNode]
:type n: int
:rtype: Optional[ListNode]
"""
head_hummy=ListNode(next=head)
slow,fast=dead_hummy,head_hummy
while (n+1)!=0:
fast=fast.next
n-=1
while fast!=None:
fast=fast.next
slow=slow.next
slow.next=slow.next.next
return head_hummy.next
期待可以给您提供帮助,以及小红心。