反转链表
题目特别简单,如下
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
这里我给出两种做法
使用栈暂存链表中的元素
我们先上代码再讲思路
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Solution {
public ListNode reverseList(ListNode head) {
Stack<ListNode> s1 = new Stack<>();
while(head != null){
s1.push(head);
head = head.next;
}
if(s1.isEmpty()){
return null;
}
//首先获取栈顶元素
ListNode node = s1.pop();
ListNode res = node;
while(!s1.isEmpty()){
//拼上从栈顶元素
ListNode emp = s1.pop();
node.next = emp;
//这个node节点每一次循环走完
//必须为新链表的最后一个节点
node = node.next;
}
//当栈顶元素取完了之后
//node节点的下一个节点就是null,反转链表完成
node.next = null;
return res;
}
}
思路:
1.主要就是先遍历链表中的元素,将它们储存到栈中,我们利用了栈先进后出的这个特点,当我们从栈往外取元素时,就相当于从后面遍历链表
2.这时我们新建一个链表的头节点,然后在新建头节点后拼上从栈取出来的元素即可完成反转