题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。例1、输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
例2、输入:head = [ ] 输出:[ ]
思路分析:假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。
我们采用双指针的迭代的方法,第一个指针prev指向头结点的前一个节点,即null,第二个指针curr指向头结点。我们要实现反向,首先指针curr需要指向前一个节点,由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。
然后指针prev和curr都要后移遍历每一个节点。遍历结束的条件是当curr指向为null时,这个时候刚好把整个链表都遍历过了,
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while(curr != null){
//设置临时指针存储curr
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
//返回prev,即反转后链表的头节点。
return prev;
}
}