题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
来源:206. 反转链表
举例:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
输入:head = [1,2] 输出:[2,1]
输入:head = [] 输出:[]
题解:
【方法一】迭代法
我们使用两个指针记录出链表的前一个节点和当前节点,再使用一个临时变量记录链表的后一个节点。此时我们每次循环都让pre
和cur
后移,让当前节点的下一个节点指向前一个节点,来完成反转。由于这是单向链表,当节点的指向断开后就无法获取下一个节点了,所以我们在完成指向转换之前需要定义一个临时遍历来保存当前节点的下一个节点。
如图所示:
public static ListNode reverseList(ListNode head) {
//定义链表的前一个节点
ListNode pre = null;
//当前节点
ListNode cur = head;
//当当前节点为空的时候,完成遍历
while(cur != null){
//定义临时节点记录链表当前节点的下一个节点
ListNode temp = cur.next;
//让两个指针同时移动,并更改指向
cur.next = pre;
pre = cur;
//让当前节点等于刚才记录的下一个节点,继续遍历
cur = temp;
}
//返回前一个节点即为反转后的链表
return pre;
}