题目描述
输入一个链表,反转链表后,输出新链表的表头,反转后的结果如下图所示。
思路分析
从前往后遍历原链表,把遍历出来的节点设置为反转后链表的首节点,当原链表遍历完毕,那 么就等到了反转后的链表。
代码实现
节点类
package day04;
import lombok.Data;
/**
* @Author yqq
* @Date 2022/05/06 18:45
* @Version 1.0
* 节点类
*/
public class Node {
/**
* 用于保存节点中的数据
*/
private Object data;
/**
* 用于保存下一个节点的地址值
*/
private Node next;
public Node(Object data) {
this.data = data;
}
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
}
实现类
package day04;
/**
* @Author yqq
* @Date 2022/05/06 18:44
* @Version 1.0
*/
public class ReverseLinkedList {
public static void main(String[] args) {
//创建一个单链表
Node lastNode = new Node(44);
Node node3 = new Node(33,lastNode);
Node node2 = new Node(22,node3);
Node headNode = new Node(11,node2);
System.out.print("反转之前:");
print(headNode);
System.out.println();
Node reverse = reversLinked(headNode);
System.out.print("反转后:");
print(reverse);
}
/**
* 实现单链表的反转
* @param headNode 需要反转单链表的首节点
* @return
*/
public static Node reversLinked(Node headNode){
//判断headNode为null和单链表只有一个节点的情况
if (headNode == null || headNode.getNext() == null)
return headNode;
//定义一个节点用于保存反转后链表的首节点
Node reverse = null;
//定义一个循环,用于实现单链表的反转操作
while (headNode != null){
//获得headNode的下一个节点
Node nextNode = headNode.getNext();
//把headNode插入到反转后的链表的最前面
headNode.setNext(reverse);
//更新反转后链表的首节点
reverse = headNode;
//更新需要反转链表的首节点
headNode = nextNode;
}
//返回反转后链表的首节点
return reverse;
}
/**
* 实现单链表的遍历操作
* @param headNode
*/
public static void print(Node headNode){
//定义一个临时节点,用于辅助单链表的遍历操作
Node tempNode = headNode;
//定义一个循环,用于是实现单链表的遍历操作
while (tempNode != null){
//输出tempNode中保存的数据值
System.out.print(tempNode.getData()+" ");
//让tempNode指向它的下一个节点
tempNode = tempNode.getNext();
}
}
}