您的位置:首页 > 其它

【LeetCode】206. Reverse Linked List

2016-03-25 14:15 369 查看
Question:

Reverse a singly linked list.

Hint: A linked list can be reversed either iteratively or recursively.

Could you implement both?

My solution (recursion): 1ms

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){
return head;
}
ListNode newHead = reverse(head,head.next);
head.next = null;
return newHead;
}
public ListNode reverse(ListNode src, ListNode next){
if(next == null){
return src;
}
ListNode newHead = reverse(next,next.next);
next.next = src;
return newHead;
}
}


My solution 2 :Memory Limit Exceeded in LeetCode System, but it can do with eclipse.

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){
return head;
}
LinkedList<ListNode> list = new LinkedList<ListNode>();
list.push(head);
while(head.next != null){
list.push(head.next);
head = head.next;
}
head = list.pop();
ListNode tail = head;
while(list.size()>0){
tail.next = list.pop();
tail = tail.next;
}
return head;
}

}


Net solution : 0ms,1ms

Excellent !!!

// iterative solution

public ListNode reverseList(ListNode head) {
ListNode newHead = null;
while(head != null){
ListNode next = head.next;
head.next = newHead;
newHead = head;
head = next;
}
return newHead;
}
// recursive solution

public ListNode reverseList(ListNode head) {
return reverseListInt(head, null);
}

public ListNode reverseListInt(ListNode head, ListNode newHead) {
if(head == null)
return newHead;
ListNode next = head.next;
head.next = newHead;
return reverseListInt(next, head);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode LinkedList