Python中链表的删除链表的倒数第n个节点的优化算法
链表删除倒数第N个节点的优化算法是使用双指针,使得遍历一遍就能找到要删除的节点。
具体做法如下:
- 定义两个指针p和q,都指向链表的头节点。
- 让q先向前移动n步。
- 然后同时移动p和q,直到q遍历到链表的尾节点。
- 此时p就指向要删除的节点的前一个节点。
- 将要删除的节点删除即可。
代码实现如下:
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def removeNthFromEnd(head: ListNode, n: int) -> ListNode: dummy = ListNode(0) dummy.next = head p, q = dummy, dummy for i in range(n): q = q.next while q.next: p = p.next q = q.next p.next = p.next.next return dummy.next
例如,给定链表1->2->3->4->5和n=2,要删除倒数第二个节点4,则调用removeNthFromEnd函数,返回的链表为1->2->3->5。
字符串示例:
s = "pidancode.com" head = ListNode(s[0]) current = head for i in range(1, len(s)): current.next = ListNode(s[i]) current = current.next new_head = removeNthFromEnd(head, 5) while new_head: print(new_head.val, end="") new_head = new_head.next # 输出 "pidancode.om"
相关文章