ExceptGY 2021-10-21 04:09 采纳率: 75%
浏览 22
已结题

python单链表反转出错到底怎么才能改对?

class Node(object):
    def __init__(self,elem,next=None):
        self.elem=elem
        self.next=next

#要支持的操作有1.is_empty()链表是否为空2.length()链表长度3.travel()遍历整个链表4.add(item)链表头部添加元素
#5.append(item)列表尾部添加元素6.insert(pos,item)指定位置添加元素7.remove(删除节点)8.search(item)查找节点是否存在

class SingleLinkList(object):
    def __init__(self,node=None):
        self.__head=node

    def is_empty(self):
        return self.__head==None
    def length(self):
        cur = self.__head  
        count = 0
        while cur!= None: 
            cur = cur.next  
        return count
    def travel(self):
        cur=self.__head
        while cur!=None:
            print(cur.elem,end=' ')
            cur=cur.next
        print()

    def add(self,item):
        node=Node(item)
        node.next=self.__head
        self.__head=node
    def append(self,item):
        node=Node(item)
        if self.is_empty():
            self.__head=node
        else:
            cur=self.__head
            while cur.next!=None:
                cur=cur.next
            cur.next=node
    def insert(self,pos,item):
        if pos<=0:
            self.add(item)
        elif pos>self.length()-1:
            self.append(item)
        else:
            pre=self.__head
            count=0
            while count<pos-1:
                count+=1
                pre=pre.next

            node=Node(item)
            node.next=pre.next
            pre.next=node
    def remove(self,item):
        cur=self.__head
        pre=None
        while cur!=None:
            if cur.elem==item:
                if cur==self.__head:
                    self.__head=cur.next
                else:
                    pre.next=cur.next
                break
            else:
                pre=cur
                cur=cur.next
    def search(self,item):
        cur=self.__head
        while cur!=None:
            if cur.elem==item:
                return True
            else:
                cur=cur.next
        return False
    def reversLinkeList(self):#反转单链表
        cur=self.__head
        pre=None
        next=None
        while cur!=None:
            next=cur.next
            cur.next=pre
            pre=cur
            cur=next
        return pre

if __name__=="__main__":
    ll=SingleLinkList()
    print(ll.is_empty())
    print(ll.length())
    ll.append(1)
    ll.append(2)
    ll.add(8)
    ll.append(3)
    ll.append(4)
    ll.append(5)
    ll.append(6)
    ll.travel()#8123456
    ll.insert(2,4)
    ll.remove(5)
    ll.travel()#8142346
    print(ll.is_empty())
    print(ll.length())
    print()
    ll.reversLinkeList()
    ll.travel()#8

这个链表是 8142346 反转后应该是6432418 但是我的缺输出8 ,改了好久都没改对 求大大们帮帮忙,在原来的基础上看看应该怎么改才能输出正确的反转链表

  • 写回答

1条回答 默认 最新

  • Hann Yang 全栈领域优质创作者 2021-10-21 10:45
    关注
    class Node(object):
        
        def __init__(self,elem,next=None):
            self.elem=elem
            self.next=next
            
    #要支持的操作有1.is_empty()链表是否为空2.length()链表长度3.travel()遍历整个链表4.add(item)链表头部添加元素
    #5.append(item)列表尾部添加元素6.insert(pos,item)指定位置添加元素7.remove(删除节点)8.search(item)查找节点是否存在
    
    class SingleLinkList(object):
        
        def __init__(self,node=None):
            self.__head=node
            
        def __str__(self):
            return f'List({self.__items__()})'
        
        def __items__(self):
            if self.is_empty():
                return None
            else:
                res,cur = [],self.__head
                while cur is not None:
                    if cur.elem==None:break
                    res.append(cur.elem)
                    cur = cur.next
                return res
            
        def is_empty(self):
            return self.__head==None
        
        def length(self):
            cur = self.__head  
            count = 0
            while cur!= None:
                count += 1
                cur = cur.next
            return count
        def travel(self):
            cur=self.__head
            while cur!=None:
                if cur.elem==None:break;
                print(cur.elem,end=' ')
                cur=cur.next
            print()
            
        def add(self,item):
            node=Node(item)
            node.next=self.__head
            self.__head=node
            
        def append(self,item):
            node=Node(item)
            if self.is_empty():
                self.__head=node
            else:
                cur=self.__head
                while cur.next!=None:
                    cur=cur.next
                cur.next=node
                
        def insert(self,pos,item):
            if pos<=0:
                self.add(item)
            elif pos>self.length()-1:
                self.append(item)
            else:
                pre=self.__head
                count=0
                while count<pos-1:
                    count+=1
                    pre=pre.next
                node=Node(item)
                node.next=pre.next
                pre.next=node
                
        def remove(self,item):
            cur=self.__head
            pre=None
            while cur!=None:
                if cur.elem==item:
                    if cur==self.__head:
                        self.__head=cur.next
                    else:
                        pre.next=cur.next
                    break
                else:
                    pre=cur
                    cur=cur.next
                    
        def search(self,item):
            cur=self.__head
            while cur!=None:
                if cur.elem==item:
                    return True
                else:
                    cur=cur.next
            return False
        
        def reversLinkeList(self):#反转单链表
            cur=self.__head
            pre=Node(None)
            while cur!=None:
                pre,cur = Node(cur.elem,pre),cur.next
            self.__head = pre
            return self
        
    if __name__=="__main__":
        
        ll=SingleLinkList()
        print(ll.is_empty())
        print(ll.length())
        ll.append(1)
        ll.append(2)
        ll.add(8)
        ll.append(3)
        ll.append(4)
        ll.append(5)
        ll.append(6)
        ll.travel()#8123456
        ll.insert(2,4)
        ll.remove(5)
        ll.travel()#8142346
        print(ll.is_empty())
        print(ll.length())
        print(ll)
        ll.reversLinkeList()
        print(ll)
        ll.travel()#8
    
    

    运行结果:

    ============================ RESTART: D:\test0.py ============================
    True
    0
    8 1 2 3 4 5 6
    8 1 4 2 3 4 6
    False
    7
    List([8, 1, 4, 2, 3, 4, 6])
    List([6, 4, 3, 2, 4, 1, 8])
    6 4 3 2 4 1 8

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么