您的位置:首页 > 其它

Leetcode Reverse Linked List

2015-09-11 01:01 281 查看
Reverse a singly linked list.

Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?

Java Code:
Iteratively:

/**
* 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 || head.next == null) {
return head;
}

ListNode p1 = head;
ListNode p2 = head.next;
head.next = null;
while(p1 != null && p2 != null) {
ListNode p3 = p2.next;
p2.next = p1;
p1 = p2;
if(p3!= null) {
p2 = p3;
}else {
break;
}
}
return p2;
}
}


Recursively:

版本一:

public ListNode reverseList(ListNode head) {
if(head==null || head.next == null)
return head;

//get second node
ListNode second = head.next;
//set first's next to be null
head.next = null;

ListNode rest = reverseList(second);
second.next = head;

return rest;
}


版本二:

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);
}


Reference:

1. http://www.programcreek.com/2014/05/leetcode-reverse-linked-list-java/
2. https://leetcode.com/discuss/34474/in-place-iterative-and-recursive-java-solution
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: