python实现单向链表及常用操作

本文详细介绍了一种单向链表的数据结构实现,包括结点类定义、链表类构造,以及添加、删除、查找和打印等核心操作的实现过程。
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 28 16:44:36 2019

@author: CommissarMa
"""


class ListNode():
    """
    结点类
    """
    def __init__(self,value):
        self.value=value#值
        self.next=None#指向下一个结点的引用
    
class LinkedList():
    """
    链表类(单向)
    """
    def __init__(self):
        self.headNode=None
        self.tailNode=None
        
    def add(self,value):
        """
        在链表尾部添加结点
        """
        if self.headNode==None:#第一次添加元素
            listNode=ListNode(value)
            self.headNode=listNode
            self.tailNode=listNode
        else:
            listNode=ListNode(value)
            self.tailNode.next=listNode
            self.tailNode=self.tailNode.next
            
    def delete(self,value):
        """
        删除链表中第一次出现这个值的结点
        """
        if self.headNode.value==value:#头节点就是该值的话,直接删除
            if self.headNode==self.tailNode:
                self.headNode=self.tailNode=self.headNode.next
            else:
                self.headNode=self.headNode.next
        else:
            node_preview=self.headNode
            node=self.headNode.next
            while node!=None:
                if node.value==value:
                    node_preview.next=node.next
                    break
                else:
                    node_preview=node
                    node=node.next
                    
    def find(self,value):
        """
        查询在链表中是否存在该值,存在返回对应的结点,不存在返回None
        """
        node=self.headNode
        while node!=None:
            if node.value==value:
                return node
            else:
                node=node.next
        return None
                    
    def print_list(self):
        """
        打印链表中所有结点的值
        """
        node=self.headNode
        while node!=None:
            print(node.value)
            node=node.next
            
    def print_list_reversely(self):
        """
        逆序打印链表
        """
        self.__print_list_reversely(self.headNode)
        
            
    def __print_list_reversely(self,node):
        """
        逆序打印链表
        """
        if node!=None:
            self.__print_list_reversely(node.next)
            print(node.value)
                    
        

if __name__=="__main__":
    linkedList=LinkedList()#新建空链表
    linkedList.add(1)
    linkedList.add(2) 
    linkedList.add(3)
    linkedList.add(4)
    linkedList.add(5)
    linkedList.add(6)
    linkedList.delete(3)
    linkedList.print_list()
    print(linkedList.find(7))
    linkedList.print_list_reversely()

应该没有什么需要解释的吧,代码如有问题,欢迎批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值