链表的使用

#/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. Cordova IOT Lesson002

    hello index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...

  2. 微服务化不同阶段 Kubernetes 的不同玩法

    本文由  网易云发布. 作为容器集群管理技术竞争的大赢家,Kubernetes 已经和微服务紧密联系,采用 Kubernetes 的企业往往都开始了微服务架构的探索.然而不同企业不同阶段的微服务实践面 ...

  3. Linux 新手应该知道的 26 个命令

    https://linux.cn/article-6160-1.html 当你进入了 Linux 的世界,在下载.安装 了某个 Linux 发行版,体验了 Linux 桌面并安装了一些你喜爱和需要的软 ...

  4. SDOI2018:荣誉称号

    题解: https://files.cnblogs.com/files/clrs97/title-solution.pdf Code: #include<cstdio> #include& ...

  5. __x__(39)0909第五天__ 表格 table

    表格 表示一种格式化的数据,如课程表,银行对账单... ... 在网页中,使用 table 创建一个表格. html代码: <!doctype html> <html> < ...

  6. 变量类型-Number

    教程:一:数字类型 (1)int 没有限制大小,有以下的四种表现形式:        1:2进制:以'0b'开头---bin        2:8进制:以'0o'开头---oct        3:1 ...

  7. Hibernate用注解方式实现一对多、多对多关系

    一.一对多关系 1.在上一篇日志中用.xml配置文件项目基础上,再往lib目录先添加一个包-hibernate-jpa-2.0-api-1.0.0.Final.jar 2.新建一个com.st.bea ...

  8. Hibernate--Day01

    Hibernate是一个面向对象的持久化框架 持久化: 1,把内存中的Java对象保存到存储设备上面: 2,最好的解诀方案:把对象持久化到数据库里面: 3, 在Java里面,把对象持久化到数据库只能使 ...

  9. matplotlib 三维旋转

    # 当elevation=0时,视角为沿x1负方向看,当elevation=90时,视角沿x3负方向看.# 当azimuth=0时,视角为沿x1负方向看,当azimuth=90时,视角沿x2负方向看. ...

  10. PAT甲级1103 Integer Factorization【dfs】【剪枝】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805364711604224 题意: 给定一个数n,要求从1~n中找 ...