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

  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;
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容