链表基本操作

原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/14950405.html

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


class LinkedList:
    def __init__(self):
        self.size = 0
        self.head = None
        self.last = None

    def get(self, index):
        if index < 0 or index >= self.size:
            raise Exception("index out of bounds")
        p = self.head
        for i in range(index):
            p = p.next
        return p

    def insert(self, index, data):
        if index < 0 or index > self.size:
            raise Exception("index out of bounds")
        new_node = Node(data)
        if self.size == 0:
            # empty linked list
            self.head = new_node
            self.last = new_node
        elif index == 0:
            # insert from head
            new_node.next = self.head
            self.head = new_node
        elif self.size == index:
            # insert from tail
            self.last.next = new_node
            self.last = new_node
        else:
            # insert from middle
            prev_node = self.get(index - 1)
            new_node.next = prev_node.next
            prev_node.next = new_node
        self.size += 1

    def remove(self, index):
        if index < 0 or index >= self.size:
            raise Exception("index out of bounds")
        if index == 0:
            # remove head
            removed_node = self.head
            self.head = self.head.next
        elif index == self.size - 1:
            # remove tail
            prev_node = self.get(index - 1)
            removed_node = prev_node.next
            prev_node.next = None
            self.last = prev_node
        else:
            # remove middle
            prev_node = self.get(index - 1)
            next_node = prev_node.next.next
            removed_node = prev_node.next
            prev_node.next = next_node
        self.size -= 1
        return removed_node

    def output(self):
        p = self.head
        result = ""
        while p is not None:
            result += str(p.data) + "->"
            p = p.next
        return result.strip("->")


linkedList = LinkedList()
linkedList.insert(0, 1)
linkedList.insert(0, 2)
linkedList.insert(1, 3)
linkedList.insert(2, 4)
linkedList.insert(3, 5)
linkedList.insert(4, 6)
# 2->3->4->5->6->1
print(linkedList.output())
# 2
print(linkedList.get(0).data)
# 4
print(linkedList.get(2).data)
# 1
print(linkedList.get(5).data)

linkedList.remove(0)
linkedList.remove(1)
# 3->5->6->1
print(linkedList.output())
强者自救 圣者渡人
原文地址:https://www.cnblogs.com/agilestyle/p/14950405.html