Reverse a singly linked list.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
这道题可以看看这篇文章的指导:http://algorithms.tutorialhorizon.com/reverse-a-linked-list/,会对什么是Reverse Linked List有个清晰的认识。只需要把currentNode的next改成preNode就可以啦。附上迭代和递归两种解法的代码:
/**
* 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) {
/*ListNode nextNode = null;
ListNode preNode = null;
ListNode currNode = head;
while (currNode != null) {
nextNode = currNode.next;
currNode.next = preNode;
preNode = currNode;
currNode = nextNode;
}
return preNode;*/
return reverseSignalList(null, head, null);
}
public ListNode reverseSignalList(ListNode preNode, ListNode currNode, ListNode nextNode) {
if (currNode == null) {
return preNode;
}
nextNode = currNode.next;
currNode.next = preNode;
preNode = currNode;
currNode = nextNode;
return reverseSignalList(preNode, currNode, nextNode);
}
}