删除链表的最后N个节点题目来源:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list定义一个链表,删除链表的倒数第n个节点,返回链表的头节点。示例:给定一个链表:1->2->3->4->5,且n=2。当删除倒数第二个节点时,链表变为1->2->3->5。说明:给定的n保证有效。Advanced:可以尝试使用one-passscan实现吗?解题思路:链表+指针;尝试使用扫描来实现;首先定义一个虚拟节点dummy,虚拟节点的下一个节点指向head;定义左右指针left,right指向dummy;先将右指针向前移动n步,然后两个指针同时移动,因为现在两个指针相隔了n个节点,当右指针指向null时,左指针指向的节点就是到的节点被删除。时间复杂度:$O(L)$,其中$L$是列表的长度。图解代码实现#单链表的定义。#classListNode:#def__init__(self,x):#self.val=x#self.next=Noneclass解决方案:defremoveNthFromEnd(self,head:ListNode,n:int)->ListNode:#定义一个dummy节点,next节点指向headdummy=ListNode(0)dummy.next=head#定义left和right指针指向dummy节点left=right=dummy#右指针向前移动n步whilen:right=right.nextn-=1#左右指针同时移动#现在左右指针相隔n步#当右指针right指向null时,左指针指针指向要删除的节点#所以当right.next==null时,停止移动,让left.next=left.next.nextwhileright.next:right=right.nextleft=left.next#删除节点left.next=left.next.nextreturndummy.next以上就是结果利用链表+指针的思想解决《删除链表的倒数第 N 个节点》问题的主要内容。欢迎关注微信公众号《书所集录》
