1.题目:
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
* 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;//定义一个pre指针指向头结点的前一个null,因为反转之后这里就是头结点就是尾结点,指向null
ListNode cur = head;//定义一个指针cur指向头结点
while(cur!=null){//循环条件是当cur指针指向null,pre指向尾结点时就停止
ListNode temp = cur.next;//定义一个临时指针先储存cur下一个结点,防止指针反转之后找不到,注意临时指针是会随着cur的变化而变化的,不能定义在循环外面
cur.next = pre;//先反转指针
pre = cur;//移动pre指针
cur = temp;//移动cur指针
}
return pre;
}
}
2.代码实现
3.图解: