题目描述:
反转一个单链表。
示例:
输入: 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) {function reverse(head, prev) {if (head === null) {return prev}next = head.nexthead.next = prevreturn reverse(next, head)}return reverse(head, null)};
迭代法
/*** Definition for singly-linked list.* function ListNode(val) {* this.val = val;* this.next = null;* }*//*** @param {ListNode} head* @return {ListNode}*/var reverseList = function(head) {if (!head) return headlet lastNode = null,curNode = headwhile (true) {let nextNode = curNode.nextcurNode.next = lastNodelastNode = curNodeif (!nextNode) breakcurNode = nextNode}return curNode};
思考:
两种方法本质上都差不多,思想就在于让每一个节点的next为null,并让它的next连接为它的前一个节点。
总结:
对两种方法还不是很熟练,需要练习思考。
