链表的使用

#/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. 源码安装cx_Oracle(适合离线环境)

    cd ~/tools unzip instantclient-basic-linux.x64-12.2.0.1.0.zip mv instantclient_12_2 /opt/ export ORA ...

  2. 【Linux】使用Nginx发布dotnet的网站

    1.安装Nginx[自行百度] 2.安装dotnet运行时[自行百度] 3.配置Nginx——  /etc/nginx/conf.d/default.conf server { listen ; se ...

  3. jmeter之JDBC Request各种数据库配置

    URL和JDBC驱动: Datebase Driver class Database URL MySQL com.mysql.jdbc.Driver jdbc:mysql://host:port/{d ...

  4. python MRO:C3算法

    http://www.codeweblog.com/python-mro-c3%E7%AE%97%E6%B3%95/ 在 python 2.2 之后,python 实现了一个新的MRO算法:C3算法, ...

  5. 数据仓库中的Inmon与Kimball架构

    对于数据仓库体系结构的最佳问题,始终存在许多不同的看法,甚至有人把Inmon和Kimball之争称之为数据仓库界的“宗教战争”,那么本文就通过对两位提倡的数据仓库体系和市场流行的另一种体系做简单描述和 ...

  6. js获取手机信息

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. JS对象1

    1 String对象 字符串创建 (1) 直接创建 var s="hello"; console.log(s); console.log(typeof s) >> he ...

  8. python3 load Iris.data数据集出现报错key words: b'Iris-setosa'

    通过搜索原因,发现有可能是在对文件读取是编译出现了问题,并且Keyword中提示b'Iris-setosa',而我们的string转float函数中没有字母b,很奇怪.所以尝试将转换函数所有的stri ...

  9. myeclipse连接mysql失败出错,已解决问题

    问题描述: 解决方案:

  10. Hibernate 的hql查询简介【申明:来源于网络】

    Hibernate 的hql查询简介[申明:来源于网络] Hibernate 的hql查询简介:http://blog.csdn.net/leaf_130/article/details/539329 ...