Python单链表

122 阅读1分钟

Python单链表

一、具体操作

1. 结点类

  1. 创建新结点
class Node(object):
    def __init__(self, data):
        self.data = data
        self.next = None

2. 单链表类

  1. 初始化头结点函数
class LinkedList(object):
    def __init__(self):
        self.head = Node(None)
  1. 创建单链表
    def CreateList(self):
        cNode = self.head
        print('输入 # 停止输入')
        temp_data = input()
        while temp_data != '#':
            nNode = Node(temp_data)
            nNode.next = cNode.next
            cNode.next = nNode
            cNode = nNode
            temp_data = input()
  1. 在头结点之后插入结点
    def InsertAfterHead(self, data):
        nNode = Node(data)
        nNode.next = self.head.next
        self.head.next = nNode
  1. 在尾部插入结点
    def InsertInTheEnd(self, data):
        nNode = Node(data)
        cNode = self.head
        while cNode.next is not None:
            cNode = cNode.next
        nNode.next = cNode.next
        cNode.next = nNode
  1. 在第i个位置插入结点
    def InsertAtI(self, i, data):
        cNode = self.head
        temp_length = 0
        while cNode.next is not None:
            cNode = cNode.next
            temp_length += 1
        if temp_length < i:
            nNode = Node(data)
            cNode = self.head
            while cNode.next is not None:
                cNode = cNode.next
            nNode.next = cNode.next
            cNode.next = nNode
        else:
            nNode = Node(data)
            temp_num = 1
            cNode = self.head
            while temp_num < i:
                cNode = cNode.next
                temp_num += 1
            nNode.next = cNode.next
            cNode.next = nNode
  1. 删除第i个位置的结点
    def DeleteAtI(self, i):
        cNode = self.head
        temp_length = 0
        while cNode.next is not None:
            cNode = cNode.next
            temp_length += 1
        if temp_length < i:
            print('该位置结点不存在')
        else:
            temp_num = 0
            cNode = self.head
            while temp_num < i:
                cNode = cNode.next
                temp_num += 1
            temp_Node = cNode.next
            temp_num = 0
            cNode = self.head
            while temp_num < i - 1:
                cNode = cNode.next
                temp_num += 1
            cNode.next = temp_Node
  1. 获得当前单链表的长度
    def GetLength(self):
        cNode = self.head
        temp_num = 0
        while cNode.next is not None:
            cNode = cNode.next
            temp_num += 1
        if temp_num == 0:
            print('该链表为空')
        else:
            print('该链表的长度为%d' % temp_num)
  1. 遍历当前单链表
    def TraverseList(self):
        if self.head:
            cNode = self.head.next
            print(cNode.data, end=' ')
            while cNode.next is not None:
                cNode = cNode.next
                print(cNode.data, end=' ')
            print()
        else:
            print('该链表为空')