【图文解析】反转一个单链表
文章目录
例题描述
反转一个链表
示例:
- 输入:
1->2->3->4->5->NULL
- 输出:
5->4->3->2->1->NULL
结构体定义
class ListNode {
int val;
ListNode next=null;
public ListNode(int val) {
this.val = val;
}
}
//12345
结构图解:
解法:双指针迭代
- 我们可以申请两个指针。
- 第一个指针叫 pre,最初是指向 null 的。
- 第二个指针 cur 指向 head,然后不断遍历 cur。
- 还要创建一个临时变量temp,记录当前节点的下一个节点
- 每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
- 都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。
过程图解:
- 创建一个 pre指针,最初是指向 null 的。
- 创建第二个指针 cur 指向 head。
-
还要创建一个临时变量temp,记录当前节点的下一个节点。
-
不断遍历 cur,每次迭代到 cur,都将 cur 的 next 指向 temp。
扫描二维码关注公众号,回复: 11656053 查看本文章temp = cur.next;
-
然后将当前节点指向pre。
cur.next = pre;
-
pre和cur节点都前进一位。
pre = cur;
``cur = temp;`
-
依次遍历图:
代码实现
class Solution {
public ListNode reverseList(ListNode head) {
//申请节点,pre和 cur,pre指向null
ListNode pre = null;
ListNode cur = head;
ListNode temp = null;
while(cur!=null) {
//记录当前节点的下一个节点
temp = cur.next;
//然后将当前节点指向pre
cur.next = pre;
//pre和cur节点都前进一位
pre = cur;
cur = temp;
}
return pre;
}
}