反转一个单链表。
示例1:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
- 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
};
个人解法
var reverseList = function(head) {
if(head === null){
return null;
}else if(head.next === null){
return head;
}else{
//head: 1 -> 2 -> 3 -> null
//我们要让newList: 3 -> 2 -> 1 -> null
var node = head,
preNode = null,
newList = null;
//找到最后一个节点3
while(node.next !== null){
preNode = node;
node = node.next;
}
//newList: 3 -> 2 ->null
//head: 1 -> 2 -> null
newList = node;
newList.next = preNode;
preNode.next = null;
while(head.next !== null){
node = head;
preNode = null;
while(node.next !== null){
preNode = node;
node = node.next;
}
node.next = preNode;
preNode.next = null;
}
return newList;
}
};