📅  最后修改于: 2023-12-03 14:53:53.412000             🧑  作者: Mango
这是一个解决链表问题的算法,主要是将给定链表的最后M个节点附加到链表的开头。这个算法可以用来解决诸如链表反转、链表环问题等。
本文将为你介绍该算法的思路、实现和复杂度分析。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def move_last_m_to_head(head: ListNode, m: int) -> ListNode:
if not head:
return head
# 计算链表长度
length = 0
node = head
while node:
length += 1
node = node.next
if length <= m:
return head
# 找到倒数第m+1个节点
p = head
for i in range(length - m - 1):
p = p.next
# 将p的next指针指向原链表头节点
new_head = p.next
# 将原链表尾节点的next指针指向原链表头节点
tail = new_head
while tail.next:
tail = tail.next
tail.next = head
# 将p作为新的头节点返回
p.next = None
return new_head