📜  Python程序删除链表的M个节点后的N个节点(1)

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

删除链表的M个节点后的N个节点

本程序的主要功能是删除链表中指定位置的M个节点,然后再输出链表中指定位置的N个节点。

算法思路
  1. 首先,遍历链表找到要删除的第M个节点的前一个节点。
  2. 如果链表长度不足M,直接返回原链表。
  3. 然后,再遍历链表找到要输出的第N个节点的前一个节点。
  4. 如果链表长度不足N,将输出整个链表。
  5. 最后,删除M个节点,将N个节点输出。
代码实现
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def delete_and_output(head: ListNode, m: int, n: int) -> ListNode:
    # 删除链表的M个节点后的N个节点
    def delete_nodes(node: ListNode, count: int) -> ListNode:
        for _ in range(count):
            if node is None:
                return None
            node = node.next
        return node

    # 创建输出链表
    def create_output(node: ListNode, count: int) -> ListNode:
        dummy = ListNode()
        output = dummy
        for _ in range(count):
            if node is None:
                return output.next
            output.next = ListNode(node.val)
            node = node.next
            output = output.next
        return output.next

    # 找到要删除节点的前一个节点
    m_prev = delete_nodes(head, m-1)
    if m_prev is None:
        return head
    
    # 删除M个节点
    m_prev.next = delete_nodes(m_prev.next, m)
    
    # 找到要输出节点的前一个节点
    n_prev = delete_nodes(m_prev.next, n-1)
    
    # 输出N个节点
    return create_output(n_prev.next, n)
使用示例
# 创建链表
head = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)
head.next = node2
node2.next = node3
node3.next = node4
node4.next = node5

# 删除链表的2个节点后的3个节点
result = delete_and_output(head, 2, 3)

# 输出结果
while result:
    print(result.val)
    result = result.next

以上代码将输出链表中第3个、第4个、第5个节点的值:

3
4
5

请根据实际情况修改参数,使用该函数删除链表中指定位置的节点,并输出指定位置的节点。