Leetcode: Reverse Linked List

Reverse a singly linked list.

Don't forget to consider the case where the linked list is empty

Time: O(2N), Space: O(1)

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 public class Solution {
10     public ListNode reverseList(ListNode head) {
11         if (head == null) return null;
12         ListNode dummy = new ListNode(-1);
13         dummy.next = head;
14         ListNode end = dummy;
15         while (end.next != null) {
16             end = end.next;
17         }
18         while (dummy.next != end) {
19             ListNode cur = dummy.next;
20             ListNode next = cur.next;
21             cur.next = end.next;
22             end.next = cur;
23             dummy.next = next;
24         }
25         return dummy.next;
26     }
27 }

 

基本迭代

Time: O(N), Space: O(1)

 1 public class Solution {
 2     public ListNode reverseList(ListNode head) {
 3         if(head == null || head.next == null) return head;
 4         ListNode p1 = head;
 5         ListNode p2 = p1.next;
 6         while(p2 != null){
 7             ListNode tmp = p2.next;
 8             p2.next = p1;
 9             p1 = p2;
10             p2 = tmp;
11         }
12         head.next = null;
13         return p1;
14     }
15 }

基本递归

Time: O(N), Space: O(N)递归栈大小

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 public class Solution {
10     ListNode newHead;
11     
12     public ListNode reverseList(ListNode head) {
13         reverse(head);
14         return newHead;
15     }
16     
17     private ListNode reverse(ListNode n){
18         if( n == null || n.next == null){
19             newHead = n;
20         } else {
21             ListNode prev = reverse(n.next);
22             prev.next = n;
23         }
24         return n;
25     }
26 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值