Loading

链表

class ListNode(object):
    def __init__(self, data, p=None):
        self.data = data
        self.next = p


class Linklist(object):
    def __init__(self):
        self.head = None

    def tailset(self):  # 初始建立
        print('input:')
        data = input()
        if data != "":
            self.head = ListNode(int(data))
            p = self.head
        else:
            print('over!')
            return
        while 1:
            data = input()
            if data != "":
                p.next = ListNode(int(data))
                p = p.next
            else:
                print('over!')
                break

    def headset(self):  # 初始建立
        print('input:')
        data = input()
        if data != "":
            self.head = ListNode(int(data))
            # p = self.head
        else:
            print('over!')
            return
        while 1:
            data = input()
            if data != "":
                node = ListNode(int(data))
                node.next = self.head
                self.head = node
            else:
                print('over!')
                break

    @property
    def show(self):  # 遍历链表
        print('链表元素如下:')
        p = self.head
        if p == None:
            print('Empty!')
            return
        while p:
            print(p.data, end=',')
            p = p.next
        else:
            print('over!')
        return

    @property
    def isempty(self):  # 判断是否空
        p = self.head
        if p == None:
            return True
        else:
            return False

    @property
    def length(self):  # 获取长度
        p = self.head
        l = 0
        while p:
            l += 1
            p = p.next
        return l

    def insert(self, data, pos):  # 数据插入
        if self.isempty and pos != 1:
            raise Exception('wrong position!')
        p = self.head
        if pos == 1:
            self.head = ListNode(data)
            self.head.next = p
        n = 2
        while n < pos and p.next != None:
            p = p.next
            n += 1
        if n == pos:
            tmp = p.next  # 先将插入位置之后的节点存起来
            p.next = ListNode(data)  # 插入节点
            # p = p.next
            # 存起来的节点放入链表
            p.next.next = tmp
        elif n < pos:
            raise Exception('wrong position!')

    def delete(self, pos):  # 删除操作
        p = self.head
        # 假设位置信息有效
        if pos == 1:

            self.head = p.next
        else:
            for i in range(pos - 2):
                p = p.next
            p.next = p.next.next

    def append(self, data):
        """
        在链表的最后追加节点
        """
        if self.isempty:
            self.head = ListNode(data)
        else:
            p = self.head
            while p.next:
                p = p.next
            else:
                p.next = ListNode(data)

lk = Linklist()
lk.tailset()
# lk.insert(2,2)
# lk.delete(1)
lk.append(100)
lk.append(101)
lk.append(102)
lk.show

 

posted @ 2021-08-08 22:39  climber_dzw  阅读(37)  评论(0编辑  收藏  举报