链表基础转载版

转载:http://t.csdnimg.cn/ikeiE,更详细

class Node(object):
    """创建单个结点类"""
    def __init__(self, data):
        self.data = data
        self.next = None
#注意类的初始化,则实例化时需要参数data,而nex不需要

class SingleLinkedList(object):#SingleLinkedList的实例化则不需要参数了
    """创建一个单链表"""

    def __init__(self):
        self.head = None

    def is_empty(self):
        """判断链表是否为空"""
        return self.head is None#head是头节点,不是data也不是next指针

    def length(self):
        """获取链表的长度"""
        cur = self.head#这里的self是指链表,cur表示当前指针所指向的结点
        count = 0
        while cur is not None:#节点非空
            count += 1
            cur = cur.next#当前指针指向的节点的next指针指向的节点赋予给cur
        return count#所以不要把next指针当作索引或者指针本身,当作它指向的内容

    def add_fist(self, data):
        """在链表的头部添加元素"""
        node = Node(data)#创建节点实例
        node.next = self.head#新结点的指针指向原来的头节点
        self.head = node#self的头换成新结点

    def add_last(self, data):
        """在链表的尾部添加元素"""
        node = Node(data)
        if self.is_empty():
            self.head = node
        else:
            cur = self.head
            while cur.next is not None:#找到最后一个节点
                cur = cur.next
            cur.next = node#让最后一个节点指向新结点

    def insert_node(self, index, data):
        """在指定位置(在第index个节点位置添加新结点)添加元素"""#11111111111
        node = Node(data)
        if index < 0 or index > self.length():
            return False
        elif index == 0:
            self.add_fist()
        elif index == self.length():
            self.add_last()
        else:
            cur = self.head
            count = 0
            while count < index - 1:#找到第index-1个节点
                cur = cur.next
                count += 1
            node.next = cur.next#新节点的指针指向原来第index个节点
            cur.next = node#第index-1节点的指针指向node

    def remove_node(self, data):#2222222222222222222222222222222
        """删除指定结点"""
        cur = self.head  # 指针指向的结点
        pre = None  # 指针指向结点的前一个
        if self.head == data:
            self.head.next = self.head
        else:
            while cur.data is not data:
                pre = cur
                cur = cur.next
            pre.next = cur.next

    def search_node_is_exist(self, data):
        """查找指定结点是否存在"""
        cur = self.head
        while cur is not None:
            if cur.data == data:
                return True
            else:
                cur = cur.next
        return False

    def traversal(self):
        """遍历整个链表"""
        cur = self.head
        while cur is not None:
            print(cur.data)
            cur = cur.next


if __name__ == '__main__':
    lists = SingleLinkedList()
    lists.add_fist(2)
    lists.add_fist(1)
    lists.add_last(4)
    lists.insert_node(2, 3)
    lists.traversal()
    print(lists.is_empty())
    print(lists.length())
    lists.remove_node(4)
    print(lists.search_node_is_exist(3))
    lists.traversal()


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值