题目描述:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
解题思路:
用数组存放链表的结点,在进行删除是就不用在遍历链表
统计链表结点的个数后进行删除时要注意两种特殊情况:
1.链表只有一个结点,删掉后直接返回none
2.删除的是头结点,用head指向头结点的下一个
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
if head.next==None:
return None
count=1
res=[head]
while res[-1].next!=None:
count+=1
res.append(res[-1].next)
#print(count,res[0])
if n==count:#删除的是头结点
head=res[0].next
else:
res[count-n-1].next=res[count-n].next
return head
p.s.评论区答案
first,second相当于快慢指针,第一个for循环是为了让first和second之间相隔n个结点,这样当f指向链表末尾时,second指向要删除的结点的前一个结点
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
first = dummy
second = dummy
for i in range(n+1):
first = first.next
while first:
first = first.next
second = second.next
second.next = second.next.next
return dummy.next
也可以直接走到要删除结点的前一个结点进行删除
for i in range(n-1):
tmp = tmp.next
if n == length - 1:
tmp.next = None
else:
tmp.next = tmp.next.next