题目来源
https://leetcode-cn.com/problems/reverse-linked-list/description/
题目描述
反转一个单链表
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题思路
- 采用迭代法解决
- 首先要有一个
pre
作为前驱和最后反转完成的头节点;再有一个cur
指向head
头节点来遍历 - 如果
cur
不为空的话,在设置一个curNext
指向cur
的下一个节点
这是未开始进行反转前的各节点位置 - 然后开始进行链表反转
-
cur.next
先指向前驱,进行反转
-
pre
后移到cur
-
cur
后移一位
注:一定要先pre
后移再cur
后移,否则cur
跑了之后再执行pre
后移会跳过节点
这是反转完成后的各节点位置
实现代码
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while (cur != null) {
ListNode curNext = cur.next;
cur.next = pre; //cur.next先指向前驱,进行反转
pre = cur; //pre再后移到cur
cur = curNext; //cur再后移一位
}
return pre;
}