题目描述:

思路分析:
解决这个问题的关键在于 反转链表的指针方向。我们可以通过一个迭代的方式来反转链表。
-
初始化三个指针:
-
l: 用于存储反转后的链表头节点,初始值为null。 -
temp: 用于遍历原链表,初始值为head。 -
a: 临时指针,用于保存temp的下一个节点,防止链表断裂。
-
-
迭代过程:
-
逐一遍历原链表中的每个节点。
-
对于每个节点,将其
next指针指向当前反转链表的头节点l。 -
更新反转链表的头节点
l为当前节点。 -
移动
temp到下一个节点,继续反转。
-
-
终止条件:
- 遍历直到
temp为null,表示已经遍历完整个链表。
- 遍历直到
-
返回结果:
- 最终返回
l,即反转后的链表的头节点。
- 最终返回
代码:
java
/**
* Definition for singly-linked list.
* public class ListNode {
* 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 l=null;
ListNode temp=head;
while(temp!=null){
ListNode a=temp.next;
temp.next=l;
l=temp;
temp=a;
}
return l;
}
}
总结:
-
反转链表的核心思想是通过改变指针的方向来实现链表的反转。
-
使用迭代方式,可以在遍历链表的过程中完成反转操作,避免使用额外的空间。
-
这种方法的时间复杂度是 O(n),空间复杂度是 O(1),是最优解法。