python单链表操作,以及反转

下面是一些实例,新建一个单链表,进行插入,查询,删除,反转单链表等操作

# 定义节点
class Node(object):
    def __init__(self, value):
        self.value = value
        self.next = None
# 定义链表
class singleLinkList(object):
    def __init__(self, node=None):
        self.__head = node

    # 头部插入
    def add(self, itemList):
        for item in itemList:
           # 创建结点
            node = Node(item) 
           # 如果是空链表则插入的节点就为头结点 
            if not self.__head:  
                self.__head = node
                self.__head.next = None

            else:
                node.next = self.__head
                self.__head = node

    # 尾部插入
    def append(self, itemList):
        for item in itemList:
            node = Node(item)
            curr = self.__head
            while curr.next != None:
                curr = curr.next
            curr.next = node
   # 输入链表结果
    def travel(self):
        cur = self.__head
        list = []
        while cur != None:
            list.append(cur.value)
            cur = cur.next
        print("链表结果是是{}".format(list))

    # 指定位置后面插入节点
    def insert(self, index, item):
        node = Node(item)
        if self.__head == None:
            self.__head = node
        else:
            if (index - 1) == 0:
                self.add(item)
            else:
                cur = self.__head
                num = 0
                while cur != None:
                    if not (index - 1) == num:
                        cur = cur.next
                        num = num + 1
                    else:
                        node.next = cur.next
                        cur.next = node
                        break

    # 链表反转
    def ReverseList(self):
        head = self.__head
        if head.next == None:
            return
        pre = None
        while head != None:
            tmp = head.next
            head.next = pre
            pre = head
            head = tmp
        return pre

    # 查找指定节点是否存在
    def search(self, item):
        cur = self.__head
        while cur != None:
            if cur.value == item:
                return True
            else:
                cur = cur.next
        return False

    # 删除节点
    def remove(self, item):

        # 如果移除的是头部,先将头部移除
        if self.__head.value == item:
            cur = self.__head
            while cur != None and cur.next!=None:
               # 这边是判断头部节点或者下一个节点值为要删除的元素时处理
                if cur.next.value==item or cur.value==item:
                    if cur == self.__head:
                        self.__head =cur.next
                        cur=self.__head
                    else:
                        cur.next=cur.next.next
                        cur=cur.next
                else:
                    cur=cur.next







if __name__ == '__main__':
    linkList = singleLinkList()
    linkList.add([1, 2, 2,2])
    linkList.append([4, 5, 6, 7, 8])
    #   singleLinkList.insert(2,8)

    print(linkList.travel())
    print(linkList.search(9))
    print(linkList.remove(2))
    print(linkList.travel())
    # b = linkList.ReverseList()
    # reverList=[]
    # while b:
    #     reverList.append(b.value)
    #     b = b.next
    # print("反转后列表是{}".format(reverList))

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值