[LeetCode]206. 反转链表 (java实现)
(java实现))
1. 题目
2. 读题(需要重点注意的东西)
思路:
将next指针倒过来。
如何将next指向的节点倒过来呢,这里需要另外定义两个节点,一个是pre = null、一个是cur = head,用pre节点指向cur的前一个节点,再用cur.next = pre,就能实现将next的指向倒转过来。但是需要注意,还需要额外定义一个节点temp,指向cur原本的后一个节点,即temp = cur.next。具体的执行顺序如下:
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
试着思考一下为什么要定义temp?
3. 解法
解法:
/**
* 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 pre = null;
ListNode cur = head;
ListNode temp = null;
while(cur != null){
//如果不定义temp,那么cur原本指向的next节点就断掉了,也就无法继续迭代了。
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
如果使用额外的链表或栈,对内存会造成浪费,链表的题目可以多尝试利用指针来解决。