题目:给你单链表的头节点?head ?,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
题解:我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。 第二个指针 cur 指向 head,然后不断遍历 cur。 每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。 都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。 动画演示如下:
动画演示中其实省略了一个tmp变量,这个tmp变量会将cur的下一个节点保存起来,考虑到一张动画放太多变量会很混乱,所以我就没加了,具体详细执行过程,请点击下面的图片查看。
?
?将tmp里面存上cur.next,这样cur就可以找到它的下一个位置,不然经过cur.next=prev,cur就会丢失原来要指向的下一个位置。
最终代码实现:(java)
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){
return null;
}//申请节点,prev和 cur,prev指向null
ListNode cur = head;
ListNode prev = null;
while(cur != null){
ListNode curNext = cur.next;//记录当前节点的下一个节点
cur.next = prev;//然后将当前节点指向pre
prev = cur;
cur = curNext;//pre和cur节点都前进一位
}
return prev;
}
}
|