链表的使用

#/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. log4j2使用入门(一)

    log4j2是log4j的一个升级版,与log4j1相比进行了很大的改善,同时也修复了一些logback的架构上的问题.所以是目前应用开发的首选的日志器(下载位置:http://apache.faye ...

  2. Kafka(二)CentOS7.5搭建Kafka2.11-1.1.0集群与简单测试

    一.下载 下载地址: http://kafka.apache.org/downloads.html    我这里下载的是Scala 2.11对应的 kafka_2.11-1.1.0.tgz 二.kaf ...

  3. Spring Data REST PATCH请求 远程代码执行漏洞案例(CVE-2017-8046)

    恶意的PATCH请求使用精心构造的JSON数据提交到spring-data-rest服务可以执行任意JAVA代码 1. 背景 Spring Data REST是Spring Data项目的一部分,可以 ...

  4. 使用Spring ThreadPoolTaskExecutor实现多线程任务

    我们为何使用多线程,之前已经有讲过了,为了更快的处理多个任务,分割任务,或者调用多个毫无关联的第三方服务 其实spring就提供了ThreadPoolTaskExecutor这个类来实现线程池,线程池 ...

  5. Django模型初识

    模型层(what.why.how) 模型的相关配置

  6. 如何用div绘制一个容器,例如圆形

    需求:一个圆形的容器,里面有两种颜色,随比率不同而变化. 实现同一个容器中两种颜色变化的关键是css渐变 //background:linear-gradient(#818181 30%,#06FF3 ...

  7. python面试必问 知识整理

      一 数据类型 1 数字 整型与浮点型   #整型int 作用:年纪,等级,身份证号,qq号等整型数字相关 定义: age=10 #本质age=int(10) #浮点型float 作用:薪资,身高, ...

  8. BZOJ.4009.[HNOI2015]接水果(整体二分 扫描线)

    LOJ BZOJ 洛谷 又是一个三OJ rank1!=w= \(Description\) (还是感觉,为啥非要出那种题目背景啊=-=直接说不好么) 给定一棵树和一个路径集合(每条路径有一个权值).\ ...

  9. __x__(31)0908第五天__导航条的练习 <ul> 版本

    效果图:  html代码: <!doctype html> <html> <head> <meta charset="utf-8" /&g ...

  10. C# 与Sql server 获取数据和执行命令

    C#数据库命封装在 System.Data.SqlClient 之中: 从使用的数据库中获取连接串connectionstring:"server=xx.xxx.xx.xx,xxxx: da ...