今天学习了一下java单链表
public class Linked {
public static class Node{
public int value; //定义数值
public Node next; //指向下一个节点
public Node (int data) {//定义一个无参构造方法
value = data;
}
//添加新的节点
public void add(int newValue) {
Node newNode = new Node(newValue);//创建链表对象,将要添加的值作为参数传递
if(this.next==null) {//如果当前节点的下个节点没有值,则将参数的值,赋值给下个节点
this.next = newNode;
}else {//如果当前节点已经有值了,则递归调用add()方法来给下一个节点添加值
this.next.add(newValue);
}
}
//打印链表
public void print() {
System.out.print(this.value);
if(this.next!=null) {//如果下一个节点还有值的,则继续调用此方法,直到所有节点的值都输出出来
System.out.print("--->");
this.next.print();
}
}
}
public static void main(String args[]) {
Node n = new Node(1);
n.add(2);
n.add(3);
n.print();
}
}
输出结果为:
1--->2--->3
对比c语言,c语言是有指针的,可以通过next直接指向下个数据的地址;java是不存在指针的,这是和c语言的一个大的区别,java是通过在类里面包含下一个节点类,一层嵌套一层,有点递归的感觉
链表的反序
电脑自带的画图工具,不怎么会用
图画的不咋地,可能代码更好理解
//链表反序
public static Node LinkedListReverse(Node head){
Node pre = null;//用来接收head.next,使链表的方向反过来,
Node next = null;//保存head.next的值,将来赋值给head节点。使head可以往右移动
while(head!=null) {//当head为空时,说明pre已经到了链表的尾部了,此时pre就是新的头节点
next = head.next;//保存下一个节点,不保存的话,如果我们找不到这个节点,它就会被jvm的垃圾回收机制给回收了
head.next = pre;//将链表的方向反过来
pre = head;//将pre节点右移动一位
head = next;//将head节点右移动一位
}
return pre;//返回一个新的头节点
}



