147.对链表进行插入排序

时游小于 1 分钟LeetCode

147.对链表进行插入排序

/*
 * @lc app=leetcode.cn id=147 lang=typescript
 *
 * [147] 对链表进行插入排序
 */

// @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)
 *     }
 * }
 */

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 insertionSortList(head: ListNode | null): ListNode | null {
	if (!head || !head.next) return head;

	let dummy = new ListNode(0); // 创建一个哑节点作为排序链表的头
	dummy.next = head;
	let current: ListNode | null = head.next;
	head.next = null; // 开始时,已排序链表只有一个元素(即原来的头节点)

	while (current) {
		let next: ListNode | null = current.next; // 保存下一个待排序节点
		let prev = dummy;

		// 在已排序链表中找到正确的插入位置
		while (prev.next && prev.next.val < current.val) {
			prev = prev.next;
		}

		// 插入当前节点
		current.next = prev.next;
		prev.next = current;

		current = next; // 继续处理下一个待排序节点
	}

console.log(dummy);

	return dummy.next; // 返回排序后的链表头
}

let tag1 = new ListNode(4);
let tag2 = new ListNode(2);
let tag3 = new ListNode(1);
let tag4 = new ListNode(3);

tag1.next = tag2;
tag2.next = tag3;
tag3.next = tag4;
insertionSortList(tag1);
// console.log(insertionSortList(tag1));
// @lc code=end

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