diff --git a/src/链表操作/q206_反转链表/f1/Solution.java b/src/链表操作/q206_反转链表/f1/Solution.java index 8e21915..bcd4a1c 100644 --- a/src/链表操作/q206_反转链表/f1/Solution.java +++ b/src/链表操作/q206_反转链表/f1/Solution.java @@ -1,28 +1,19 @@ package 链表操作.q206_反转链表.f1; -import java.util.ArrayList; -import java.util.List; - /** - * 暴力法舍弃空间 o(n) + * 遍历直接反向修改next指针 o(n) */ class Solution { + public ListNode reverseList(ListNode head) { - if (head == null || head.next == null) { - return head; - } - List list = new ArrayList<>(); + ListNode pre = null; ListNode temp = head; while (temp != null) { - list.add(temp.val); - temp = temp.next; - } - ListNode rs = new ListNode(list.get(list.size() - 1)); - ListNode t1 = rs; - for (int i = list.size() - 2; i >= 0; i--) { - t1.next = new ListNode(list.get(i)); - t1 = t1.next; + ListNode t = temp.next; + temp.next = pre; + pre = temp; + temp = t; } - return rs; + return pre; } } diff --git a/src/链表操作/q206_反转链表/f2/Solution.java b/src/链表操作/q206_反转链表/f2/Solution.java index d65acaf..479ed78 100644 --- a/src/链表操作/q206_反转链表/f2/Solution.java +++ b/src/链表操作/q206_反转链表/f2/Solution.java @@ -1,18 +1,17 @@ package 链表操作.q206_反转链表.f2; /** - * 遍历直接反向修改next指针 o(n) + * 递归法 o(n) */ class Solution { + public ListNode reverseList(ListNode head) { - ListNode pre = null; - ListNode temp = head; - while (temp != null) { - ListNode t = temp.next; - temp.next = pre; - pre = temp; - temp = t; + if (head == null || head.next == null) { + return head; } - return pre; + ListNode p = reverseList(head.next); + head.next.next = head; + head.next = null; + return p; } }