# 单向链表的翻转

思路:

通过递归方法,存储一个临时指向前一个节点变量,将当前链表 next 指向上一个节点达到翻转效果。

  • 单向链表
  • 第一步
  • 第二步
  • 第三步
  • 第四步
  • 第五步

# 实现示例

class LinkList {
  public next: LinkList;
  public data: number;
  constructor(data: number) {
    this.data = data;
  }
}

// 循环解法
function reverseLinkList(data: LinkList) {
  let head = data;
  let tmp = null;
  while (head) {
    const next = head.next;
    head.next = tmp;
    tmp = head;
    head = next;
  }
  return tmp;
}

// 递归处理
function reverseLinkListRecursion(pre: LinkList, head: LinkList) {
  if (!head) return pre;
  let next = head.next;
  head.next = pre;
  return reverseLinkListRecursion(head, next);
}

let node1 = new LinkList(1);
let node2 = new LinkList(2);
let node3 = new LinkList(3);
let node4 = new LinkList(4);
let node5 = new LinkList(5);

node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = null;

console.log(node1);

const h = reverseLinkList(node1);
console.log(h);

console.log(reverseLinkListRecursion(null, h));
上次更新: 9/1/2020, 1:16:17 AM