数据结构与算法-----链表倒转

描述:将链表倒转输出

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


猜你喜欢

转载自blog.csdn.net/lsm18829224913/article/details/80301508
今日推荐