206. 反转链表
题目描述:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
解决思路:
- 定义一个空指针pre,当前指针cur和下一个指针nxt。
- 每向后移动一位前,将当前指针cur.next 指向pre,pre移动到cur, cur移动到nxt,该过程就是转变了指向方向。
- nxt向后再移动一位,重复第2步骤。
- 重复2,3步骤直到遍历完单向链表。
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
if(head == null || head.next == null) return head;
let pre = null, cur = head, nxt = head.next;
while(cur!= null) {
cur.next = pre;
pre = cur;
(cur = nxt) && (nxt = nxt.next);
}
return pre;
};
解决思路:递归
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
if(head == null || head.next == null) return head;
let tail = head.next, p = reverseList(head.next);
head.next = tail.next;
tail.next = head;
return p;
};
自述
算法小白一个,记录自己的算法学习之路。如果您发现问题,欢迎留言交流。