链表的使用

#/usr/bin/python
#-*- coding: utf-8 -*-
#Function: simulate the link-list in python
#__author__: Tresser
#

class LNode(object):
  #结点初始化函数, p 即模拟所存放的下一个结点的地址
  #为了方便传参, 设置 p 的默认值为 0
  def __init__(self, data, p=0):
    self.data = data
    self.next = p

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

  #链表初始化函数, 方法类似于尾插
  def initList(self, data):
    #创建头结点
    self.head = LNode(data[0])
    p = self.head
    #逐个为 data 内的数据创建结点, 建立链表
    for i in data[1:]:
      node = LNode(i)
      p.next = node
      p = p.next

  #链表判空
  def isEmpty(self):
    if self.head.next == 0:
      print "Empty List!"
      return 1
    else:
      return 0

  #取链表长度
  def getLength(self):
    if self.isEmpty():
      exit(0)

    p = self.head
    len = 0
    while p:
      len += 1
      p = p.next
    return len

  #遍历链表
  def traveList(self):
    if self.isEmpty():
      exit(0)
    print '\rlink list traving result: ',
    p = self.head
    while p:
      print p.data,
      p = p.next

  #链表插入数据函数
  def insertElem(self, key, index):
    if self.isEmpty():
      exit(0)
    if index<0 or index>self.getLength()-1:
      print "\rKey Error! Program Exit."
      exit(0)

    p = self.head
    i = 0
    while i<=index:
      pre = p
      p = p.next
      i += 1

    #遍历找到索引值为 index 的结点后, 在其后面插入结点
    node = LNode(key)
    pre.next = node
    node.next = p

  #链表删除数据函数
  def deleteElem(self, index):
    if self.isEmpty():
      exit(0)
    if index<0 or index>self.getLength()-1:
      print "\rValue Error! Program Exit."
      exit(0)

    i = 0
    p = self.head
    #遍历找到索引值为 index 的结点
    while p.next:
      pre = p
      p = p.next
      i += 1
      if i==index:
        pre.next = p.next
        p = None
        return 1

    #p的下一个结点为空说明到了最后一个结点, 删除之即可
    pre.next = None

#初始化(建立)链表与数据

data = [1,2,3,4,5]

#引用链表
l = LinkList()

l.initList(data) #调用(传值data)链表初始化函数 
l.traveList()#调用链表遍历函数

#(用法例如)插入结点到索引值为3之后, 值为666
l.insertElem(666, 3)
l.traveList()#再次调用链表遍历函数

#删除索引值为4的结点
l.deleteElem(4)
l.traveList()

python --(链表)的更多相关文章

  1. Python链表的实现与使用(单向链表与双向链表)

    参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...

  2. Python链表操作(实现)

    Python链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对链表本身的数据结构特 ...

  3. python 链表表达式 map、filter易读版

    链表推导式 [x for x in x] 链表推导式提供了一个创建链表的简单途径,无需使用 map(), filter() 以及 lambda.返回链表的定义通常要比创建这些链表更清晰.每一个链表推导 ...

  4. Python链表与反链表

    # -*- coding:utf8 -*- #/usr/bin/env python class Node(object): def __init__(self, data, pnext = None ...

  5. python链表的实现

    根据Problem Solving with Algorithms and Data Structures using Python 一书用python实现链表 书籍在线网址http://intera ...

  6. python 链表

    在C/C++中,通常采用“指针+结构体”来实现链表:而在Python中,则可以采用“引用+类”来实现链表. 节点类: class Node: def __init__(self, data): sel ...

  7. python链表的实现,有注释

    class Node():                   #node实现,每个node分为两部分:一部分含有链表元素,成数据域;另一部分为指针,指向下一个  __slots__=['_item' ...

  8. python 链表的反转

    code #!/usr/bin/python # -*- coding: utf- -*- class ListNode: def __init__(self,x): self.val=x self. ...

  9. python 链表、堆、栈

    简介 很多开发在开发中并没有过多的关注数据结构,当然我也是,因此,我写这篇文章就是想要带大家了解一下这些分别是什么东西. 链表 概念:数据随机存储,并且通过指针表示数据之间的逻辑关系的存储结构. 链表 ...

  10. Add Two Numbers(from leetcode python 链表)

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

随机推荐

  1. [转] vue&webpack多页面配置

    前言 最近由于项目需求,选择使用vue框架,webpack打包直接使用的vue-cli,因为需要多页面而vue-cli只有单页面,所以就决定修改vue-cli的配置文件来满足开发需求. html-we ...

  2. chromedriver与chrome版本映射表

    问题: 利用selenium调用谷歌浏览器时报错,后发现是由于浏览器与浏览器驱动不匹配造成的 C:\Users\\Desktop\selenium>python chrome.py[9956:6 ...

  3. C#创建ActiveX

    因为最近的项目可能会用到调用外部设备,读取信息.为了和现有的BS系统兼容,并以较小的代价满足需求,于是想到了使用ActiveX技术(也有人建议使用Silverlight),这技术虽然比较早了,但还是能 ...

  4. Django模型操作常用方法

    1.Save() 基本方法:object.save() save顾名思义是保存的意思,在django中既可以进行新增也可以进行修改操作.具体判定的算法如下: 1.如果对象的主键属性为一个求值为True ...

  5. python之面向对象深入探测

    一 __doc__ 表示类的描述信息 #!/usr/bin/env python # -*- coding: utf-8 -*- class C: """ 这是个大美女 ...

  6. PrintService类打印

    系统打印服务框架代码位于android.printservice包中.系统并没有实现具体打印功能,需要打印机厂商制作插件接入系统打印服务之后,自行实现 主要类: PrintDocument:表示待打印 ...

  7. Web版记账本开发记录(一)代码和功能展示

    一丶基本机构 数据库截图 record表 年份表 index.jsp <%@ page language="java" contentType="text/html ...

  8. Linux命令 df du

    df: 列出文件系统的整体磁盘使用量 du: 评估文件系统的磁盘使用量 $ df [-ahikHTm] [目录或文件名] 参数: -a: 列出所有的文件系统,包括系统特有的/proc 等文件系统 -k ...

  9. CodeForces 1143A The Doors

    The Doors 签到题 #include <iostream> using namespace std; int a[200005]; int main() { int n; scan ...

  10. java_基础_static{}语句块

    static{}语句块会在类被加载的时候当且仅当执行一次,一般用于初始化变量和调用静态方法 Class.forName(“类名”);方法执行时会加载类 外界调用类中静态变量是不会加载类的,也就是说,如 ...