题目描述:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:给定的 n 保证是有效的。
进阶:你能尝试使用一趟扫描实现吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
解题思路:
1、获得表头,通过循环遍历链表,创建一个容器将节点保存。
2、要删除某节点,此处假设为B,即将前一个节点A的next更改指向B的下一个节点C。
3、因此考虑特殊情况:
3.1 删除表头 3.2 删除表尾
我的算法:
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
ls=[]
beifen=head
while True:
ls.append(head)
if head.next==None:break
head=head.next
if len(ls)==1:
beifen.val=''
return beifen
if n!=1 and n!=len(ls):
ls[-n-1].next=ls[-n+1]
return beifen
elif n==1:
ls[-2].next=None
return beifen
elif n==len(ls):
return ls[1]
执行用时 :40 ms, 在所有 python3 提交中击败了91.39%的用户
#我的方法使得必须考虑第三种特殊情况,即链表只有1个节点。