`
希绪弗斯
  • 浏览: 16578 次
社区版块
存档分类
最新评论

链蒙本人的各种方法

 
阅读更多

1线性链表是由结点组成的,一个结点又是由数据域和指针域两部分组成的,数据域中存放的就是数据元素, 指针域中的指针值对应的就是存储器中的一个存储地址。

2每一个结点所占用的空间是一段连续的空间。不同结点的物理存储位置可能是相邻的,也可能不相邻。

3每个结点都是在程序运行时动态创建的,并不知道每个结点的存储位置,需要关心的是数据元素之间的逻辑关系,即用指针来表示出的关系。

4整个链表都是由一个头指针Head指出,也就是说头指针唯一确定该链表。

5单链表就是说单向链表,也就是只有一个指针域。

这些概念性的知识点就是为了实际操作做铺垫,现在就说一下方法:

定义一个结点类:

public class Node {
    Object obj;   //数据域
    Node next;    //指针值
   // Node index;
    public Node(Object obj){
    	this.obj=obj;
    	//this.next=next;
    }
}

 定义一个链表类:

public class LinkList {
	Node head = null;
	Node last = head;
             public static void main(String[] args) {
      }
}

 在此类中定义方法,第一个添加元素方法:

public void add(Object obj) {
		Node node = new Node(obj);
		if (head == null) {
			head = node;
			last = node;
		} else {
			last.next = node;
			last = node;
		}
	}

 无论是更改或者删除一个元素,前提是要可以通过索引得到该元素,通过索引得到该元素的前提是先得到该链表的长度:

//得到链表长度
	public int getlength() {
		int length = 0;
		Node node = head;//获取头结点,则可获得此链表,但不能直接用头节点,因为头节点会往后移
		while (node != null) {
			length++;
			node = node.next;
		}
		return length;
	}

 

通过索引得到元素的方法:

//通过索引得到链表中元素的值
	public Node getNode(int index) {
		if (index >= 0 && index < this.getlength()) {
			Node node = head;
			while (node != null) {
				if (count == index)//当当前计数等于索引,则跳出循环
					break;
				count++; 
				node = node.next; //继续往下数
			}
			return node;
		}
		return null;
	}

 

删除和更改方法就容易得多了:

// 从表头向表尾计数
	public void delete(int index) {
				if (index < 0 || index >= this.getlength()) {
			throw new RuntimeException("下标越界");
		}
		if (index == 0) { //如果是头结点
			head = head.next;
		} else {
			Node n1 = this.getNode(index - 1);
			Node n2 = this.getNode(index + 1);
			n1.next = n2;
		}
	}
//根据索引更改链表中的元素
	public void update(int index, Node node) {
		Node node2 =  getNode(index);
		node2 = node;
	}

 遍历打印该链表(递归):

public void printLinkList(Node head) {
		if (head != null) {
			System.out.println(head.obj);
			Node node = head.next;
			printLinkList(node);
		}
	}

 那么怎样判断一个链表上是否有环呢?因为本人之前有写根据下标得到结点的方法,所以这个方法基于那个方法写就容易得多了~:

//判断一个链表是否有环
	private boolean isCircle(){
		for(int i=0;i<list.getlength();i++){
			for(int j=1;j<list.getlength();j++){
				if(getNode(i).next==getNode(j).next){//若两个指针指向同一个结点,则代表有环
					System.out.println("环入口结点为第"+i+"个"+"该链表上有环");
					return true;	
				}
			}
		}
		return false;
	}

 

关于单链表反转,本来也想用getNode(),但是不知怎么回事总报错(得再想想),所以就寻了一个方法,这个方法很好玩,它是建了一个空表头,这表头就放在那里,通过改换指针指向,将后面的所有结点反转,当然是真的反转而不是仅仅改变了元素的值,不过说实在的,下面那五个赋值当时把我真绕懵了(其实我真是看中了这5个赋值),但觉得这楼主写的挺好,就盗用了~
//单链表反转
	private Node tranverse(Node head){
		Node n=head.next;
		Node next=null;
		Node nextnext=null;
		if(n==null||n.next==null){
			return head;
		}
		while(n.next!=null){//递归了
			next=n.next;
			nextnext=next.next;
			next.next=head.next;
			head.next=next;
			n.next=nextnext;
		}
		return head;
	}
 判断两个单链表是否相交,其实也就是判断两个链表中是否有指针指向相同的结点了,只需两个链表分别遍历循环嵌套,之后再用getNode()方法,之后进行判断是否相等即可~
链表内容真的好多,还有约瑟夫环,排序,合并等好多问题。
所以,未完待续~眨眼
分享到:
评论

相关推荐

    DCC尺寸链计算工具V1.4

    因此,本人作为一名机械工程师基于自己浅薄的认识和能力开发了该款DCC尺寸链计算工具。 该软件占用内存小,使用方便。 可用极值法、概率法、仿真法计算一维线性尺寸链,可进行正计算、中间计算和反计算。基本可以...

    金老师链接自助交换系统

    本程序无任何限制,无错误,无版权,免费用,交个朋友,本人承接各种小零活(ASP+access),仿站,仿源码,修改修复问题源码,混口饭吃,谢谢! 本人时间有限,本程序的页面是山寨自别的网站,程序为自己设计,在此...

    免费自助链接导航无限制版 v1.0.zip

    免费自助链接导航无限制版无任何限制,无错误,无版权,免费用,交个朋友,本人承接各种小零活(ASP access),仿站,仿源码,修改修复问题源码,混口饭吃,谢谢! 本人时间有限,本程序的页面是山寨自别的网站,...

    undo log版本链图示 - 本人原创!!!

    通过这种方式,每一个新的修改都会创建一个新的记录版本,并且其回滚指针指向前一次修改的记录,形成了一个链表结构。这个链表的头部是最新的数据版本,而尾部则是最初的数据版本,即事务开始前的数据状态。 撤销...

    自动友情链接,自动链程序

    本人用买的自动链程序,绝对可用。 自动链接无须注册,只要在贵站首页做好本站链接,并点击一次进来,系统将自动提取贵站首页标题、关键字自动在下面显示!以后每次点进来您都是第一位! 后台:admin.asp admin ...

    Centos7搭建以太坊私链实践

    本人在Centos7搭建以太坊私链的实践教程,从准备环境开始介绍,以图文的形式说明了搭建以太坊私链的各个步骤

    供应链公司的核心竞争力.pdf

    供应链管理与服务企业通过商业模式与供应链服务创新,可以改变、优化供应链的组合结构、运作方式和利益分配关系,在帮助供应链企业增强盈利和抗风险能力的同时,获得自身的市场空间和独特的竞争优势。 供应链管理...

    考生本人患病经历和疫情防控承诺表.doc

    考生本人患病经历和疫情防控承诺表.doc

    开蒙语言处理器

    这是本人开发的新一代程序设计语言,称为类自然语言,命名为开蒙语言。这个语言类似自然语言。蕴含知识,可据有无限词汇量,语言的内涵和外延可动态演进。传统编程语言的命令或语句过于细碎,功能弱,数量有限。用...

    供应链公司的核心竞争力 (2).docx

    供应链管理与服务企业通过商业模式与供应链服务创新,可以改变、优化供应链的组合结构、运作方式和利益分配关系,在帮助供应链企业增强盈利和抗风险能力的同时,获得自身的市场空间和独特的竞争优势。供应链管理无论...

    K/3供应链培训PPT,内部资料。

    K/3供应链培训PPT,内部资料。为本人项目工作中用到的资料

    本人使用代码-本人使用代码

    本人使用代码 本人使用代码 本人使用代码

    本人自创两种方法脱VMP

    本人自创两种方法脱VMP.............

    51CTO下载-仿go9go交情链接交换平台

    介绍一下你的资料吧,这...奋斗链! 注明本程序不是我原创的! 我只是修改了一些小BUG及加一些简单的功能 功能上的添加: 添加了百度快照 添加了留言本 添加了站长资讯功能 添加了站长查询工具(需要可以与本人索取)

    linux ftp服务器的配置及各种知识点,本人亲自总结.docx

    linux ftp服务器的配置及各种知识点,本人亲自总结.docx

    3516CV500编译链——himix200

    himx200 编译链由于文件接近4个G无法上传 所以上传了百度云盘链接,链接长期有效 本人已在x86_64的linux平台安装成功

    ORACLE EBS入门及供应链核心系统详解教程-上册-第一个压缩包

    Oracle EBS 功能顾问入门必备参考书目。共上下两册。每册分为两个压缩包,需要同时下载完后才能解压成功。本资源是上册第一个压缩包。其余压缩包请从本人其他上传资源中找。

    全球价值链地位测算数据(跨国面板+垂直专业化率+出口国内增加值+全球价值链指数)

    本贴提供了基于wiod数据库测算的各国全球价值链地位数据 时间跨度:2001-2 014年 附件一:三篇GVC测算英文经典文献的学习笔记(Hummels,2001 ;Fally,2012;Wang z,2014) 附件二:测算code(do文档 ) 附件三:测算...

    ORACLE EBS入门及供应链核心系统详解教程-下册 第一包,共两包

    Oracle EBS 功能顾问入门必备参考书目。共上下两册。每册分为两个压缩包,需要同时下载完后才能解压成功。本资源是下册第一个压缩包。其余压缩包请从本人其他上传资源中找。

    matlab数字图像处理GUI各种功能本人亲测,用matlab设计的GU

    matlab数字图像处理GUI各种功能本人亲测,用matlab设计的GUI实现各种数字图像处理功能,有亮度变换,傅里叶变换,几何变换,彩色图像变换,小波变换,空域滤波,频域滤波,运动模糊,去噪声,加噪声,图像复原,图像...

Global site tag (gtag.js) - Google Analytics