题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
PS:感觉这类的题目在前面做过好多了。。。
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
思路
设置一个pre来作为新的反转之后的链表,设计一个循环(head不为空)从头到尾遍历head:先用temp来保存head.next;将head指向pre,代表做的反向操作;pre进行更新为head,表示最新的反向链表;head向后更新为temp,准备遍历下一个节点。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while (head != null){
ListNode temp = head.next;
head.next = pre;
pre = head;
head = temp;
}
return pre;
}
}