You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以螺旋方式打印单链表?求有效实现方法

单链表螺旋遍历打印实现方案

核心思路

先将链表节点全部存入列表,利用列表的随机访问特性,通过双指针从首尾交替取元素,完美匹配螺旋遍历的需求:

  • 遍历原链表,把所有节点(或节点值)存入列表
  • 左指针从列表头部开始,右指针从尾部开始
  • 交替取左、右指针指向的元素,直到左指针超过右指针为止

问题排查

你之前用ArrayList+双指针没成功,大概率是没处理好奇数长度链表的中间元素重复取的问题,或者循环条件设置错误(比如用left < right而非left <= right)。

代码实现(Python)

1. 定义链表节点类

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

2. 螺旋打印实现(直接输出结果)

def spiral_print(head):
    # 把链表元素转存到列表
    node_vals = []
    current = head
    while current:
        node_vals.append(str(current.val))
        current = current.next
    
    left, right = 0, len(node_vals) - 1
    result = []
    while left <= right:
        # 取左指针元素
        result.append(node_vals[left])
        left += 1
        # 左右指针未重合时,取右指针元素
        if left <= right:
            result.append(node_vals[right])
            right -= 1
    
    # 按要求格式输出
    print(" -> ".join(result) + " -> X")

3. 测试示例

# 测试用例1:1->2->3->4->5->6
head1 = ListNode(1)
head1.next = ListNode(2)
head1.next.next = ListNode(3)
head1.next.next.next = ListNode(4)
head1.next.next.next.next = ListNode(5)
head1.next.next.next.next.next = ListNode(6)
spiral_print(head1)  # 输出:1 -> 6 -> 2 -> 5 -> 3 -> 4 -> X

# 测试用例2:1->2->3
head2 = ListNode(1)
head2.next = ListNode(2)
head2.next.next = ListNode(3)
spiral_print(head2)  # 输出:1 -> 3 -> 2 -> X

4. 进阶:构建螺旋顺序的新链表

如果需要直接生成螺旋顺序的链表而非仅打印值,可以用以下代码:

def spiral_build_new_list(head):
    nodes = []
    current = head
    while current:
        nodes.append(current)
        current = current.next
    
    left, right = 0, len(nodes) - 1
    dummy = ListNode(0)
    new_current = dummy
    
    while left <= right:
        new_current.next = nodes[left]
        new_current = new_current.next
        left += 1
        if left <= right:
            new_current.next = nodes[right]
            new_current = new_current.next
            right -= 1
    # 截断新链表的尾部,避免循环
    new_current.next = None
    
    # 打印新链表验证
    temp = dummy.next
    output = []
    while temp:
        output.append(str(temp.val))
        temp = temp.next
    print(" -> ".join(output) + " -> X")

内容的提问来源于stack exchange,提问作者techieadi4703

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:31:28