紫丁香的依恋 2023-05-09 16:00 采纳率: 0%
浏览 7

关于#链表#的问题,如何解决?反转链表

力扣206题目:反转链表,使用的是常规的解题思路,但是输出不正确,请问这边有什么错误呢


```python
class Node(object):
    def __init__(self, value=None, next=None):
        self.value = value
        self.next = next


class linkedList(object):
    def __init__(self):
        self.head = Node()  # 创建头指针结点
        self.length = 0  # 初始链表长度,头指针节点不计入长度

    def __len__(self):  # 重写特殊方法返回self.length
        return self.length

    def head_insert(self, value):  # 链表头部插入
        node = Node(value)
        if self.head.next == None:
            self.head.next = node
            node.next = None
        else:
            # 插入元素指针域指向原head元素
            tmp_head = self.head.next  # 原头指针节点存储到tmp_head
            self.head.next = node  # 新head指针指向node
            node.next = tmp_head  # 新插入节点指向原头指针节点
        self.length += 1

    def append(self, value):  # 链表尾部添加结点
        # 创建新插入的结点对象
        node = Node(value)
        if self.length == 0:
            self.head.next = node  # 只有一个节点,指针指向自己
        else:
            curnode = self.head.next  # 变量curnode存放指针
            while curnode.next != None:
                curnode = curnode.next
            curnode.next = node  # 当为最后一个节点时,指针指向新插入节点
        self.length += 1

    def print_element(self):
        cur = self.head
        while cur:
            print(cur.value)
            cur = cur.next


dummy_node = Node(-1)
L = linkedList()
L.head = dummy_node
nums = [1, 2, 3, 4]
for i in range(len(nums)):
    L.append(nums[i])

L.print_element()
if L.length == 2:
    print('无需反转')
q = L.head
print(q.value)
p = q.next
print(p.value)
while p:
    temp = p.next
    print('temp:')
    # print(temp.value)
    p.next = q
    print('p:')
    # print(p.value)

    q = p
    print('q')
    # print(q.value)
    p = temp
    print('p')
    # print(p.value)

L.head = q
L.print_element()


```

  • 写回答

2条回答 默认 最新

  • 语言-逆行者 2023-05-09 16:08
    关注

    在反转链表的过程中,最后一个节点的指针没有被更新为 None。

    修改后的代码如下:

    while p:
        temp = p.next
        p.next = q
        q = p
        p = temp
     
    q.next = None  # 添加这一行代码,将最后一个节点的指针更新为 None
    
    

    希望我的回答能够帮到你!

    评论

报告相同问题?

问题事件

  • 请采纳用户回复 5月11日
  • 创建了问题 5月9日

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题