/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode p = null; // 定义一个指向反转后链表的头部的指针,初始值为null
ListNode q = head; // 定义一个指向原始链表的头部的指针
while (q != null){ // 遍历原始链表,直到q指向null
ListNode temp = q.next; // 保存q的下一个节点,避免反转后链表断开
q.next = p; // 将q的下一个节点指向反转后链表的头部
p = q; // 将p指向q,即将q插入到反转后链表的头部
q = temp; // 将q指向原始链表的下一个节点,继续遍历
}
return p; // 返回反转后链表的头部
}
}
算法思路如下:
- 定义一个指向反转后链表的头部的指针p,初始值为null。
- 定义一个指向原始链表的头部的指针q。
- 遍历原始链表,直到q指向null。
- 在每次循环中,将q的下一个节点保存到temp中,避免反转后链表断开。
- 将q的下一个节点指向p,即将q插入到反转后链表的头部。
- 将p指向q,即将反转后链表的头部指向q。
- 将q指向原始链表的下一个节点,继续遍历。
- 返回反转后链表的头部p。