Python3实现单链表操作

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


class LinkedList(object):
    def __init__(self):
        self.length = 0
        self.head = None

    # 向链表追加节点
    def add(self, data):
        if self.length:
            node = self.head
            while node.next:
                node = node.next
            else:
                node.next = Node(data)
        else:
            self.head = Node(data)
        self.length += 1

    # 返回指定索引节点
    def get(self, index):
        if index >= self.length:
            raise(IndexError, "list index out of range.")
        node = self.head
        while index:
            node = node.next
            index -= 1
        return node

    # 删除一个节点
    def delete(self, index):
        if index == 0:
            self.head = self.head.next
        elif index == self.length-1:
            self.get(index-1).next = None
        else:
            self.get(index - 1).next = self.get(index+1)
        self.length -= 1

    # 在指定索引位置插入一个节点
    def insert(self, index, data):
        if index == 0:
            self.add(data)
        else:
            node = Node(data, self.get(index))
            self.get(index - 1).next = node
        self.length += 1

    # 遍历链表中的节点值
    def traverse(self):
        value = list()
        node = self.head
        while node:
            value.append(node.data)
            node = node.next
        return value


if __name__ == "__main__":
    linked = LinkedList()
    for i in range(10):
        linked.add(i)
    print("LinkedList: {}".format(linked.traverse()))
    print("GetNode(2): {}".format(linked.get(2)))
    linked.delete(2)
    print("LinkedList(after delete(2): {}".format(linked.traverse()))
    linked.insert(2, "a")
    print("LinkedList(after insert(2, a): {}".format(linked.traverse()))

 

posted @ 2020-06-15 19:21  学而思则敏  阅读(443)  评论(0)    收藏  举报