我们都知道栈是先进后出的
图源于百度百科
那么反转链表的话我们岂不是只要把数据存入栈中然后再弹出来改变朝向不就行了,以下是Java实现代码
import java.util.Stack;
public class Main {
/*
问题:输入一个链表,反转链表后,输出新链表的表头。
*/
public static ListNode ReverseList(ListNode head) {
//有条输入用例是输入空数据
if (head == null) {
return null;
}
Stack<ListNode> stack = new Stack<>();
//全部入栈
while (head != null) {
stack.push(head);
head = head.next;
}
//第一个节点 3>2>1
ListNode first = stack.pop();
//下一个节点
ListNode next = first;
//如果不为空,则弹出(全部出栈)
while (!stack.isEmpty()) {
//把下一节点连接到本节点中
next.next = stack.pop();
//本节点跳为下一节点
next = next.next;
}
//此时next为最后节点,原来连接倒数第二节点,设为null
next.next = null;
return first;
}
/*
main方法测试链表是否反转
*/
public static void main(String[] args) {
//插入假数据(1,2,3)
ListNode list1 = new ListNode();
list1.data = 1;
ListNode list2 = new ListNode();
list2.data = 2;
ListNode list3 = new ListNode();
list3.data = 3;
list1.next = list2;
list2.next = list3;
//输出数据
ListNode list = list1;
System.out.println(list.data);
while (list.next != null) {
list = list.next;
System.out.println(list.data);
}
//调用算法反转
list = ReverseList(list1);
//输出结果
System.out.println(list.data);
while (list.next != null) {
list = list.next;
System.out.println(list.data);
}
}
/*
写一个伪的链表类,用于测试
*/
public static class ListNode {
public ListNode(){
}
public ListNode next;
public int data;
}
}