一. 题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
例子一:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
例子二:
输入:head = [1,2]
输出:[2,1]
题目来源:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnnhm6/
二. 总结记录:
1.本题主要熟悉java中的stack
2.注意:stack为自定义的结构(ListNode)
3.stack.isEmpty(),有则返回false 没有才会返回true 所以注意加入“!”
三. 解析代码:
public class ReverseList {
public ListNode reverseList(ListNode head) {
/*使用库函数创建ListNode的栈*/
Stack<ListNode> stack = new Stack<>();
/*将链表中的节点放入栈中*/
while(head != null){
stack.push(head);
head = head.next;
}
/*如果栈是空的话就直接返回空*/
if (stack.empty()){
return null;
}
/*取出栈顶的元素(包括数和指针)*/
ListNode node = stack.pop();
/*answer用于返回头结点,由于循环时会改变node*/
ListNode answer = node;
while (!stack.isEmpty()){
/*取出栈顶的元素(包括数和指针),相当于栈第二个,但实际上是栈顶*/
ListNode tempNode = stack.pop();
/*与头结点串联起来*/
node.next = tempNode;
/*node应该指向最后一个元素的,而此时是第一个,所以要让node = node.next
让它指向尾节点的*/
node = node.next;
}
/*最后需要让node指向的下一个节点为空,否则链表为环了,终止条件就会改变*/
node.next = null;
return answer;
}
}