美文网首页
【算法练习leetcode篇】之链表——206 Reverse

【算法练习leetcode篇】之链表——206 Reverse

作者: 芒果加奶 | 来源:发表于2019-02-14 17:48 被阅读0次
  1. Reverse Linked List 反转链表

迭代循环

  • 详解:分别使用三个指针,cur指向head,pre指向null,next指向cur.next保存原链表顺序
  • 核心:1->2时 先断开1->2的连接,将1指向pre,pre赋值cur,cur赋值next,实现2->1反转

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}

 */
const reverseList = head => {
  let cur = head,
    pre = null;
  while (cur) {
    let next = cur.next; //保留cur.next
    cur.next = pre;
    pre = cur;
    cur = next;
  }
  return pre; //反转后的链表
};

递归

详解:每次递归时打破head和head.next的指针连接,同时将head.next.next也就是下一节点的指向head

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
const reverseList = head => {
  if (head === null || head.next === null) return head;
  let newHead = reverseList(head.next); // 将下一节点传到reverseList递归
  head.next.next = head; //head->1->2 1的指针由2指向head
  head.next = null; // head指针指向null,实现1->head反转
  return newHead;
};

相关文章

网友评论

      本文标题:【算法练习leetcode篇】之链表——206 Reverse

      本文链接:https://www.haomeiwen.com/subject/ddcyeqtx.html