描述:将链表倒转输出
下面是思路就放图 不清楚私聊(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; //当然我们初始化的时候只能初始化他的数据域 } }