链表相关问题

96 阅读1分钟

题目:[61. 旋转链表]

题目描述

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k **个位置。

运行效率

1650815611(1).png

代码如下

class ListNode {
  val: number;
  next: ListNode | null;
  constructor(val?: number, next?: ListNode | null) {
    this.val = val === undefined ? 0 : val;
    this.next = next === undefined ? null : next;
  }
}
function rotateRight(head: ListNode | null, k: number): ListNode | null {
  let pre = head;
  let end = head;
  let i = 0;

  while (end && i < k) {
    i++;
    end = end.next;
  }

  if (end === null) {
    k = k % i;
    i = 0;
    end = head;
    while (end && i < k) {
      i++;
      end = end.next;
    }
  }

  if (!end) return null;

  while (end.next) {
    pre = pre.next;
    end = end.next;
  }

  end.next = head;

  head = pre.next;
  pre.next = null;

  return head;
}

function getLinkList(arr: number[]) {
  const root = new ListNode();
  let temp = root;
  arr.forEach((item) => {
    temp.next = new ListNode(item);
    temp = temp.next;
  });
  return root.next;
}

const root = getLinkList([0, 1, 2]);

const troot = rotateRight(root, 4);

debugger;