[Python 数据结构与算法]单链表

标签: 数据结构 Python
6人阅读 评论(0) 收藏 举报
分类:

节点只包含了一个数据项和对下一个节点的引用,定义一个单链表节点类如下:

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

单链表类的实现如下,包含:

is_empty():判断是否为空链表

length():链表长度

traverse():链表遍历

add():head添加item

append():尾部添加item

insert():其他任意位置添加item

remove():删除item

research():查找item是否存在

class LinkedList(object):
    def __init__(self):
        self.head=None
    def is_empty(self):
        return self.head==None
    def length(self):
        "链表长度"
        cur=self.head
        count=0
        while cur!=None:
            cur=cur.next
            count+=1
        return count
    def traverse(self):
        "遍历链表"
        cur=self.head
        while cur!=None:
            print(cur.item)
            cur=cur.next
        print("遍历结束")
    def add(self,item):
        "头部添加元素"
        node=Node(item)
        if self.is_empty():
            self.head=node
        else:
            node.next=self.head
            self.head=node
    def append(self,item):
        "尾部添加元素"
        node=Node(item)
        if self.is_empty():
            self.head=node
        else:
            cur=self.head
            while cur.next!=None:
                cur=cur.next
            cur.next=node
    def insert(self,pos,item):
        "指定位置添加元素"
        if pos<=0:
            self.add(item)
        elif pos>self.length():
            self.append(item)
        else:
            node=Node(item)
            count=0
            cur=self.head
            while count<pos-1:
                count+=1
                cur=cur.next
            "先将新的节点的node的next指针指向原来的cur的next"
            "将插入位置的前一个节点的next指向新的节点"
            node.next=cur.next
            cur.next=node

    def remove(self,item):
        "删除节点"
        cur=self.head
        pre=None
        while cur!=None:
            if cur.item==item:
                "第一个就是要删除的节点"
                if not pre:
                    self.head=cur.next
                else:
                    pre.next=cur.next
                break
            else:
                pre=cur
                cur=cur.next
    def search(self,item):
        "查找节点是否存在"
        cur=self.head
        while cur!=None:
            if cur.item==item:
                return True
            cur=cur.next
        return False
测试
if __name__ == "__main__":
    li= LinkedList()
    li.add(1)
    li.add(2)
    li.append(3)
    li.insert(2, 4)
    print("length:",li.length())
    li.traverse()







查看评论

数据结构和算法

-
  • 1970年01月01日 08:00

数据结构与算法基础(二)之单链表的插入与删除操作

今天主要来讲一讲单链表的插入与删除操作的步骤和算法解释。这是单链表最基本的操作但是也是最重要的基础之一,有些地方还比较容易出错。下面我就结合源代码在上面加上注释来解释每一步的作用。 **一、单链...
  • sinat_21312425
  • sinat_21312425
  • 2016-02-27 15:49:19
  • 5386

《数据结构与算法》-单链表基本操作的C语言实现

最近在学算法内容,发现很多算法依赖于基本的数据结构,所以从新温习数据结构,记录一下,以后知识点忘记可以提醒自己哪里比较容易出错。 所用教材《数据结构与算法分析》by Mark Allen Weiss...
  • tengyuan93
  • tengyuan93
  • 2016-03-10 15:22:10
  • 1197

【数据结构】关于复杂链表的复制

复杂链表与单链表 首先呢,得告诉大家【复杂链表】和【普通链表】的一些区别 可是这个不怎么好描述 不过呢,我请来了【四个小学生】,来帮助大家理解 小时候的小A、小B、小C和小D 我们有四个...
  • qq_31828515
  • qq_31828515
  • 2016-09-20 16:18:24
  • 937

数据结构与算法(7)——单链表习题二

题目1:假设两个单向链表在某结点相交后,成为一个新的单向链表。两个链表的头结点是已知的,但是相交的结点未知。也就是说,它们相交之前的结点个数是未知的,并且两个链表的结点数也可能不同。假设链表List1...
  • u012187452
  • u012187452
  • 2017-03-28 09:29:13
  • 341

C语言数据结构 单链表的删除算法

  • 2011年05月10日 16:06
  • 476B
  • 下载

数据结构-基本算法-单链表

  • 2017年05月21日 18:46
  • 5KB
  • 下载

数据结构与算法——单链表的基本操作

下面的代码中包括获取某一结点的数据和增删操作#include #include typedef int status; typedef int ElemType; #define ERROR 0; #...
  • u011342403
  • u011342403
  • 2017-05-26 22:24:16
  • 300

数据结构和算法设计专题之---单链表的逆序

下面很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014-07-18 21:24:14
  • 4116

数据结构与算法分析-用C语言实现单链表

掌握单链表很容易,把下面的代码弄懂,敲几遍,全部记住,而且记清每一个细节。 首先,在List.h中声明单链表的ADT.我们把我们所需要的自定义类型啊,函数啊,都声明出来,但这里我们只是声明他们,而具...
  • mrbourne
  • mrbourne
  • 2014-05-19 23:12:22
  • 1470
    个人资料
    等级:
    访问量: 2678
    积分: 88
    排名: 151万+
    文章存档
    最新评论