【路飞】206. 反转链表

96 阅读1分钟

206. 反转链表

题目描述:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

反转链表示例1.jpg

解决思路:

  1. 定义一个空指针pre,当前指针cur和下一个指针nxt。
  2. 每向后移动一位前,将当前指针cur.next 指向pre,pre移动到cur, cur移动到nxt,该过程就是转变了指向方向。
  3. nxt向后再移动一位,重复第2步骤。
  4. 重复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;
};

自述

算法小白一个,记录自己的算法学习之路。如果您发现问题,欢迎留言交流。