📜  打印最大长度链对(1)

📅  最后修改于: 2023-12-03 14:54:29.056000             🧑  作者: Mango

打印最大长度链对

简介

在一个给定的链表中,找到最长的一对相邻节点,使得第一个节点是前一个链表而第二个是后一个链表。返回这两个节点。如果链表为空或只有一个节点,则返回null。

思路
  1. 遍历链表,记录每个节点的值和位置
  2. 计算每个相邻节点的位置差值,若为1则表示相邻,记录相邻节点的值和位置
  3. 对所有相邻节点进行比较,找到位置差值最大的一对节点,返回它们的值和位置
代码
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def printMaxPair(head):
    if not head or not head.next:
        return None
    node_vals = []
    node = head
    while node:
        node_vals.append((node.val, len(node_vals)))
        node = node.next
    max_pair = None
    for i in range(len(node_vals) - 1):
        if node_vals[i+1][1] - node_vals[i][1] == 1:
            pair = (node_vals[i][0], node_vals[i+1][0])
            if not max_pair or node_vals[i+1][1] - node_vals[i][1] > max_pair[1][1] - max_pair[0][1]:
                max_pair = (node_vals[i], node_vals[i+1])
    return max_pair
示例

输入:

head = ListNode(1)
head.next = ListNode(3)
head.next.next = ListNode(2)
head.next.next.next = ListNode(4)

输出:

(2, 4)