描述:将链表倒转输出
下面是思路就放图 不清楚私聊(q857854781,wx18829224913)
代码如下:
package jzoffer;
public class ListTest2 {
public static void main(String[] args) {
NodeList nodeList1 = new NodeList("1");
NodeList nodeList2 = new NodeList("2");
NodeList nodeList3 = new NodeList("3");
NodeList nodeList4 = new NodeList("4");
nodeList1.next = nodeList2;
nodeList2.next = nodeList3;
nodeList3.next = nodeList4;
initNodeList(nodeList1);
System.out.println("");
System.out.println("------分割线------");
reverse(nodeList1);
}
public static void initNodeList(NodeList nodeList){ //初始化输出一下这个链表
if(nodeList == null){ //如果我们传进来的这个头节点的地址为null的话那么我们直接返回null
System.out.println("null");
return; //并且结束方法
}
while(nodeList != null){ //那么如果传进来的不为null的话
if(nodeList.next == null){ //判断他下一个节点是否为null,如果为null的话,那就是只有这一个节点,直接输出就好了。
System.out.print(nodeList.data+ " ");
return;
}
System.out.print(nodeList.data+ " ");//如果下一个节点不为null的话,我们先输出这个节点的数据,
nodeList = nodeList.next; //然后让当前节点的地址保存为下一节点的地址
}
}
public static void reverse(NodeList nodeList){
if(nodeList == null){
System.out.println("null ");
return;
}
NodeList pre = nodeList; //定义指向第一节点的指针
NodeList cur = nodeList.next;//定义一个指向第二个节点的指针
NodeList temp; //创建一个临时指针,主要用来临时保存相对来说点歌节点之后的Node
while(cur != null){ //如果指向第二个节点的指针地址不为空的话
temp = cur.next; //临时节点开始保存下一个第三个NodeList的地址
cur.next = pre; //第二个节点指向了第一个节点
pre = cur; //我们创建的pre指针开始后移,指向第二个节点
cur = temp; //我们创建的cur指针开始后移,指向第三个节点
}
nodeList.next = null; //最后将原本的头节点的指针域置为null;
initNodeList(pre); //调用初始化方法将其输出
}
}
class NodeList{ //创建一个Node的基本数据结构
String data;
NodeList next = null;
public NodeList(String data){
this.data = data; //当然我们初始化的时候只能初始化他的数据域
}
}
