zoukankan      html  css  js  c++  java
  • python --(链表)

    链表的使用

    #/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 ' link 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 " Key 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 " Value 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()

  • 相关阅读:
    服务器的Redis连接不上解决方案
    给大家推荐一个很好的自学网站
    简单说下HashMap的实现原理
    LinkedList源码解析
    你要了解的jvm
    单例设计
    百度编辑器删除旧的图片
    Ueditor 单图、多图、视频、附件的上传及在线管理总结
    上传新图片删除旧图片
    webapi发布IIS时出现500.19错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")或者是通过包含overrideModeDefault="Deny"....
  • 原文地址:https://www.cnblogs.com/luorende/p/10729328.html
Copyright © 2011-2022 走看看