1.题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
2. 自己的常规解法:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode pos = null;
ListNode lastNode = null;
lastNode = head;
pos = head.next;
head.next = null;
head = pos;
while(head.next != null){
pos = head.next;
head.next = lastNode;
lastNode = head;
head = pos;
}
head.next = lastNode;
return head;
}
}
2.1 eclipse 完整可调试代码:
package single_100;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
/**
* TODO : 创建一个 链表,翻转链表
* @author Infosec_jy
*
*/
public class ReverseList_206 {
public static void main(String[] args) {
int[] vals = new int[]{1,2,3,4,5};
ListNode head = new ListNode(vals[0]);
ListNode pos = head;
for(int i = 1;i < vals.length; i++){
pos.next = new ListNode(vals[i]);
pos = pos.next;
}
// ListNode head = null; 考虑 head 为 null
// ListNode head = new ListNode(6); 考虑 head.next 为 null
ListNode result = reverseList(head);
while(head.next != null){
System.out.print(head.val);
head = head.next;
}
System.out.print(head.val);
}
public static ListNode reverseList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode pos = null;
ListNode lastNode = null;
lastNode = head;
pos = head.next;
head.next = null;
head = pos;
while(head.next != null){
pos = head.next;
head.next = lastNode;
lastNode = head;
head = pos;
}
head.next = lastNode;
return head;
}
}
3. 性能评级:

4. 思考过程:
第一次 有考虑 存储到 stringBuffer中,再转为 int[] 数组,实现。感觉会比较消耗空间,想法作废。
现在用 递归 做,感觉 不复杂,为什么 性能差这么多呢。 要考虑。
5. 后期优化:
大神的解法:
public static ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode next;
while(cur != null){
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
性能:

思考: 尽量不定义多余变量,尽量定义 局部变量。争取每个变量 都有其特殊且简单的意义。
本文详细解析了单链表反转的算法实现,包括迭代和递归两种方法,并提供了Eclipse环境下可运行的完整代码示例。通过对算法的深入探讨,对比了不同方法的性能表现,旨在帮助读者理解链表操作的核心技巧。
1227

被折叠的 条评论
为什么被折叠?



