在JAVA中如何创建一个链表(头插法、尾插法)以及反转链表
2020-07-05 14:40
471 查看
钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>
目录
- 创建链表(头插法)
- 创建链表(尾插法)
- 反转链表
创建链表(头插法)
我们知道,在数据结构中链表一般有两个部分:data以及指针域next。
那么怎么通过data以及next创建一个链表呢?
万物皆有开端,所以我们首先需要创立一个头结点,head。
public static Node createLinkByHead(Scanner reader) { Node head=null; }
然后我们将键盘录入的数据通过while循环按照输入顺序一个结点一个结点的赋值给结点.data(这里我们将数字为0设置为循环的终止条件-----也就是当数值为0时,while循环停止,链表就创建到这里,并不会把0进行赋值)。每次新建一个结点,head都会变成新建的那个结点,所以最后的结点顺序是与录入顺序相反的。
public static Node createLinkByHead(Scanner input) { Node head=null; int m=input.nextInt(); while(m!=0)//进行判断 { Node p=new Node(m);//创建一个新的对象——p结点。 if(head==null)head=p;//如果头结点为空、将P作为头结点。 else { p.next=head;//此前已经有结点,p结点的next指针域指向head head=p;//将head移到现在的p结点 } m=input.nextInt();//读取下一个数字。 } return head;//返回头结点 }
示意图如下:
创建链表(尾插法)
尾插法依然换汤不换药,但是我们需要多出一个指针用来指向尾部的节点。
public static createLinkByTail(Scanner input) Node head=null; Node Tail=null; int m=input.nextInt();
然后我们录入第一个节点之后,录入第二个结点时,head不会再变化,他一直指向第一个录入的节点,而Tail用来进行之前头插法head的赋值指针域的操作。
public static createLinkByTail(Scanner input) { Node head=null; Node tail=null; int m=input.nextInt(); while(m!=0) { Node p=new Node(m);//创建新的对象。 if(head==null)tail=head=p;//如果head为空,那么相当于第一个结点,将 1000 tail顺便一起指向这个节点 else { tail.next=p;//将当前节点的next指针域指向下一个节点。 tail=p;//tail后移。 } m=input.nextInt(); } return head;//返回头结点 }
反转链表
反转链表,我们脑子里应该可以想象得到怎么反转。也就是像下图:
所以我们所需要做的就是从head开始通过遍历(从第一个到最后一个)一个一个去反转他们的指针,最后将head指向最后一个即可。
整个反转过程可以理解成 (head)1->2->3->null 变成 (head)3->2->1->null。
public static reverseLink(head) { Node p=head;//将p作为第一个节点 head=null; if(p!=null) { Node q=p.next;//将当前节点指向下一个结点的指针保存到q里。 p.next=head;//将当前结点指向原来的上一个结点 head=p;//将head后移一个结点; p=q;//把开始指向的位置赋给p,可以看成p=p.next(原来的); } return head }
这是我的第一篇博客,如有描述的不对,烦请各位指出,多多包涵!谢谢大家。
相关文章推荐
- 一个链表创建、反转、打印的C语言代码
- 如何创建一个简单的JAVA存储过程?[转贴]
- Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
- 链表问题:如何判断一个链表有环,以及环的长度,起始位置。
- 在java中如何创建一个内存泄露
- java类中创建一个自身的静态对象,如何理解不会无限创建导致堆溢出
- 如何用java创建一个jdbc程序
- 如何创建一个链表(链栈:二)
- 如何创建一个链表
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(1)
- Android Studio 中如何创建一个新的工程以及库文件的创建以及引用
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- Java:如何检测一个链表是否有环。
- java如何创建一个指定的日期对象
- Java学习之单链表创建以及正向遍历和反向遍历方法
- java中如何使用asm动态的生成或修改一个class文件以及asm的架构思想
- java中如何取到一个对象的所有属性值,并且在创建一个相同的对象
- 当创建一个类时,java.lang.Object是如何成为新创建类的默认父类的?
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)