package com.company;
import java.util.Iterator;
import java.util.LinkedList;
public class DefLinkNode {
/**
* 1新增链表类
* 2新增链表实例
* 3新增链表节点:逐个从第一个节点开始加,并加上链表节点关系。
* 4删除链表节点:删除任意一个节点,删除第一个节点
* 5读取链表内容:读取所有节点的值
* 6修改链表某个节点的值:修改任意一个节点的值
* 7取链表的值:取任意一个节点的值
* 8计算链表长度:从任意一个节点开始计算到末尾的长度
* 9插入节点:从中间插入节点
* @param args
*/
public static void main(String[] args) {
//链表的每个值就是一个节点,这个节点就是定义的链表类。
//定义第一个链表节点
LinkNode head=new LinkNode();//使用无参构造初始化
head.val=2;//直接赋值
System.out.println("第一个节点的值为"+head.val);
//定义第二个链表节点:1.必须用第一个节点关联第二个节点 2.必须定义第二个节点的值
LinkNode second=new LinkNode();
second.val=3;
head.next=second;
System.out.println("第一个节点的下个节点为"+head.next+" 第二个节点的值为:"+head.next.val);
//计算链表长度:传第一个节点
int length=getLength(head);
System.out.println("链表长度为:"+length);
//计算链表长度:传第二个节点
int smallLength=getLength(second);
System.out.println("第二个节点到末尾节点有多长:"+smallLength);
//插入节点:在第一和第二节点间插入一个节点, 1.新建一个节点 2.断开第一和第二节点的关系 3.把新建的节点连上第一个节点 4.把最后一个节点连在新建的节点上
LinkNode newNode=new LinkNode();
newNode.val=4; //1.新建节点
head.next=null;//2.断开第一个节点和第二个节点关系
head.next=newNode;//3.把新建的节点连上第一个节点
newNode.next=second;//4.把最后一个节点连在新建的节点上
LinkNode current=head;//注意要从头开始
String value="";
while(current!=null){//注意这里不能直接传head,因为循环会改变head的位置
value=value.concat(String.valueOf(current.val))+" ";
current=current.next;
}
System.out.println("插入节点后的值:"+value);//把所有节点按顺序逐个打印出来
//删除第二个节点
head.next=null;
newNode.next=null;
head.next=second;
String value2="";
LinkNode current2=head;//注意要从头开始
while(current2!=null){
value2=value2.concat(String.valueOf(current2.val))+" ";
current2=current2.next;
}
System.out.println("删除第二个节点后的值"+value2);//把所有节点按顺序逐个打印出来
//先在末尾加一个节点
LinkNode third=new LinkNode();
third.val=5;
second.next=third;
//删除链表第一个节点:1.断开第一个节点和第二个节点的连接,第二个节点和后续节点的连接依然不变。后续的还是一个链表。
head.next=null;//剩余的节点就从newNode开始了
String value3="";
LinkNode current3=second;//因为删除了第一个链表,所以此处只有从second节点开始
while(current3!=null){
value3=value3.concat(String.valueOf(current3.val))+" ";
current3=current3.next;
}
System.out.println("删除第一个节点后的值"+value3);//把所有节点按顺序逐个打印出来
//修改链表某个节点的值
third.val=8;
String value4="";
LinkNode current4=second;//因为删除了第一个链表,所以此处只有从second节点开始
while(current4!=null){
value4=value4.concat(String.valueOf(current4.val))+" ";
current4=current4.next;
}
System.out.println("修改链表某个节点后的值"+value4);//把所有节点按顺序逐个打印出来
}
public static class LinkNode{
private int val;//链表的值,可以定义为任意值,根据业务需求定,不一定是int
private LinkNode next;//链表的每个元素都是属于一样的类
}
public static int getLength(LinkNode node){//这里传链表的一个节点,如果传的头节点就计算链表的长度,如果传的链表的中间某个节点,就从链表中间某个节点计算到末尾的长度
int length=0;
while(node!=null){
length=length+1;
node=node.next;
}
return length;
}
}
----