📌  相关文章
📜  将最后 m 个元素移动到给定链表的前面(1)

📅  最后修改于: 2023-12-03 15:09:38.184000             🧑  作者: Mango

将最后 m 个元素移动到给定链表的前面

本题目需要将链表中最后 m 个结点移动到链表的前面,可以分为以下步骤:

  1. 遍历链表,确定结点总数 n
  2. 找到倒数第 m+1 个结点,即需要调整的结点的前驱结点
  3. 将表尾 m 个结点的 next 指针指向表头结点,将前驱结点的 next 指针指向表尾结点,完成链表调整

以下是示例代码(假设链表结点类型为 ListNode):

def MoveLastMToHead(head: ListNode, m: int) -> ListNode:
    if not head or not head.next or m <= 0:
        return head
    
    # 遍历链表,确定结点总数 n
    n = 0
    cur = head
    while cur:
        n += 1
        cur = cur.next
    
    if m >= n:
        return head
    
    # 找到倒数第 m+1 个结点,即需要调整的结点的前驱结点
    cur = head
    for i in range(n - m - 1):
        cur = cur.next
    
    # 将表尾 m 个结点的 next 指针指向表头结点
    tail = cur.next
    while tail.next:
        tail = tail.next
    tail.next = head
    
    # 将前驱结点的 next 指针指向表尾结点
    new_head = cur.next
    cur.next = None
    
    return new_head

以上代码可以将最后 m 个元素移动到链表的前面。