python 单链表的操作

 单链表的基本操作

首先创建一个结点类的结构,以便后面的操作

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

 创建一个链表类

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

    #判断是否为空
    def isEmpty(self):
        p=self.head#头指针
        if p.next==None:
            print("Link is Empty")
            return True
        return False
    #打印链表
    def printLink(self):
        if self.isEmpty():
            return False
        p=self.head
        while p:
            print(p.data,end='')
            p=p.next

 创建单链表是一个动态生成链表的过程,就是从一个空的单链表开始,依次建立各个元素的结点,并把它们依次插入链表

    def InitList(self,data):
        self.head=Node(data[0])#头结点
        p=self.head#头指针

        for i in data[1:]:
            node=Node(i)
            p.next=node
            p=p.next

计算单链表的长度

在使用链表时,经常需要求表的长度,为此创建一个求表长的函数,从左到右,遍历表中所有的元素,并完成计数

    def LengthList(self):
        if self.isEmpty():
            return 0
        p=self.head
        cut=0
        while p:
            cut+=1
            p=p.next
        return cut

 单链表的插入

假设我们要把结点q插入到结点p的后面,只要把结点q插入到结点p和结点p.next 之间就行。

只要让q.next和p.next 指针改变,让p的后继结点改为q的后继结点,再把q的后继结点变成p的后继结点,插入操作的顺序不能打乱

    def InsertList(self,s,data):
        if self.isEmpty() or s<0 or s>self.LengthList():
            print("Insert failed")
            return
        p=self.head
        index=1
        while index<s:
            p=p.next
            index+=1
        node=Node(data)
        node.next=p.next
        p.next=node

表单的删除

如果想要删除结点q,其实就是把它的前继结点p指针绕过q,直接指向q的后继结点 如图

让p.next 直接为p 的next  的 next , p  的next 为q ,所有就是p.next=q.next

 def DeleList(self,s):
        if self.isEmpty() or s<0 or s>self.LengthList():
            print("Dele failed")
            return
        index =1
        p=self.head

        while index<s:
            pre =p
            index+=1
            p=p.next

        pre.next=p.next
        p=None

 

整体代码如下

#-*- coding:utf-8 -*-
#__auther__:WM
class Node(object):
    #定义一个结点类
    def __init__(self,data):
        self.data=data
        self.next=None
#创建一个链表类
class LinkList(object):
    def __init__(self):
        self.head=Node(None)

    #判断是否为空
    def isEmpty(self):
        p=self.head#头指针
        if p.next==None:
            print("Link is Empty")
            return True
        return False
    #打印链表
    def printLink(self):
        if self.isEmpty():
            return False
        p=self.head
        while p:
            print(p.data,end='')
            p=p.next
    #创建单链表
    def InitList(self,data):
        self.head=Node(data[0])#头结点
        p=self.head#头指针

        for i in data[1:]:
            node=Node(i)
            p.next=node
            p=p.next

    #单链表的长度
    def LengthList(self):
        if self.isEmpty():
            return 0
        p=self.head
        cut=0
        while p:
            cut+=1
            p=p.next
        return cut
    #单链表的插入

    def InsertList(self,s,data):
        if self.isEmpty() or s<0 or s>self.LengthList():
            print("Insert failed")
            return
        p=self.head
        index=1
        while index<s:
            p=p.next
            index+=1
        node=Node(data)
        node.next=p.next
        p.next=node

    #单链表的删除操作
    def DeleList(self,s):
        if self.isEmpty() or s<0 or s>self.LengthList():
            print("Dele failed")
            return
        index =1
        p=self.head

        while index<s:
            pre =p
            index+=1
            p=p.next

        pre.next=p.next
        p=None

    #单链表的读取
    def GetList(self,s):
        if self.isEmpty()or s<0 or s>self.LengthList():
            print("error!")
            return
        index=1
        p=self.head
        while index<s:
            index+=1
            p=p.next
        print("第{}个值是{}".format(s,p.data))

猜你喜欢

转载自blog.csdn.net/W1517055683/article/details/83548842
今日推荐