📌  相关文章
📜  打印给定索引指定的给定链表的子列表(1)

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

打印给定索引指定的给定链表的子列表

链表是一种线性数据结构,由节点按照一个指定的顺序构成。每个节点由两部分组成:数据和指向下一个节点的指针。在某些情况下,我们需要打印链表的子列表,即从链表的某个节点开始打印到另一个节点或链表的末尾。下面是一个实现这个功能的程序。

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def printSubList(head: ListNode, m: int, n: int):
    """
    打印给定索引指定的给定链表的子列表
    :param head: 链表头节点
    :param m: 子列表的起始索引
    :param n: 子列表的结束索引
    """
    if not head:
        return None
    
    # 定义一个哑节点
    dummy = ListNode(0)
    dummy.next = head
    prev = dummy
    
    # 找到第m-1个节点
    for i in range(m-1):
        prev = prev.next
    curr = prev.next
    
    # 反转第m到第n个节点
    for i in range(n-m):
        nextNode = curr.next
        curr.next = nextNode.next
        nextNode.next = prev.next
        prev.next = nextNode
    
    # 输出子列表
    result = []
    node = dummy.next
    while node:
        result.append(node.val)
        node = node.next
    
    return result[m-1:n]

程序中定义了一个ListNode类表示链表节点,包括节点的值和指向下一个节点的指针。另外,定义了一个printSubList函数,以链表的头节点、子列表的起始索引m和结束索引n作为输入参数,输出链表的子列表。

在函数中,首先定义一个哑节点,并将其指针指向头节点。然后,找到第m-1个节点,用prev指向它,用curr指向第m个节点。接下来,从第m个节点开始,每次将其后继节点插入到prev指向的节点之后,直到第n个节点结束。最后,输出子列表节点的值。

下面是一个示例:

# 创建链表 1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))

# 打印子列表 2 -> 3 -> 4
print(printSubList(head, 2, 4))

# 输出结果 [2, 3, 4]

以上示例代码可以成功输出链表的子列表,对于程序员来说,可以根据自己的需要修改函数中的相应参数。