📅  最后修改于: 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]
以上示例代码可以成功输出链表的子列表,对于程序员来说,可以根据自己的需要修改函数中的相应参数。