19.删除链表的倒数第-n-个结点

时游小于 1 分钟LeetCode

19.删除链表的倒数第-n-个结点

/*
 * @lc app=leetcode.cn id=19 lang=typescript
 *
 * [19] 删除链表的倒数第 N 个结点
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * 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 removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
	let len = 0; // 计算长度
	let current = head;
	while (current) {
		len++;
		current = current.next;
	}

	let tag = len - n;
	let newNode = new ListNode(0, head); // 保底
	let cur = head as ListNode;

	let p = newNode;
	let index = 0;
	while (index <= tag) {
		if (index == tag) {
			// 找到位置
			p.next = cur.next;
			return newNode.next;
		}

		p = cur;
		cur = cur.next as ListNode;
		index++;
	}

	return null;
}

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;
	}
}

let listTag1 = new ListNode(1);
let listTag2 = new ListNode(2);
// let listTag3 = new ListNode(4);
// let listTag4 = new ListNode(7);
// let listTag5 = new ListNode(1);
// let listTag6 = new ListNode(2);
// let listTag7 = new ListNode(6);

listTag1.next = listTag2;
// listTag2.next = listTag3;
// listTag3.next = listTag3;
// listTag4.next = listTag5;
// listTag5.next = listTag6;
// listTag6.next = listTag7;

console.log(removeNthFromEnd(listTag1, 2));
// @lc code=end

上次编辑于:
贡献者: 15327360835
Loading...