赞
踩
题目:
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
- class ListNode:
- def __init__(self, val=0, next=None):
- self.val = val
- self.next = next
-
- # 个人题解:双指针
- class Solution:
- def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
- # 这里可以构造一个前驱节点指向头结点,会少一些判断情况,具体看官方题解
- node = head
- pre = node
- arrow = node.next
- for i in range(n-1):
- arrow = arrow.next
- while arrow:
- pre = node
- node = node.next
- arrow = arrow.next
- if head == node:
- return head.next
- else:
- pre.next = node.next
- del node
- return head
-
- # 暴力
- class Solution:
- def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
- def getLength(head: ListNode) -> int:
- length = 0
- while head:
- length += 1
- head = head.next
- return length
- dummy = ListNode(0, head)
- length = getLength(head) # 获取链表长度
- cur = dummy
- for i in range(1, length - n + 1):
- cur = cur.next
- cur.next = cur.next.next
- return dummy.next
-
- # 栈实现
- class Solution:
- def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
- dummy = ListNode(0, head)
- stack = list()
- cur = dummy
- while cur:
- stack.append(cur)
- cur = cur.next
-
- for i in range(n):
- stack.pop()
-
- prev = stack[-1]
- prev.next = prev.next.next
- return dummy.next
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。