利用栈的思想,先把链表的节点都压入栈中;在出栈之前,先把栈顶节点的next置为null作为出栈链表的尾节点;接着把栈中的节点一个一个出栈,来实现链表的反转。
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
Stack<ListNode> stack = new Stack<>();
if(head == null) { //链表若为空 直接返回null
return null;
}
ListNode cur = head; //定义一个cur节点 指向头节点
while (cur != null) { //直至链表节点完全压入栈中
stack.push(cur);
cur = cur.next;
}
head.next = null; //原来的头节点置为null
ListNode ret = stack.pop(); //ret为反向链表的头节点 先记录下来
ListNode cur1 = ret; //node为剩余栈中的节点
while (!stack.isEmpty()) { //直至栈为空 完全pop()出来为止
cur1.next = stack.pop();
cur1 = cur1.next;
}
return ret;
}
}