[LeetCode] Insertion Sort List

问题:

Sort a linked list using insertion sort.

分析:

一般在array上实现的insertion sort,都是向之前的方向移动,找到自己的位置。而现在一个list不能向前移动,所以我们通过从头开始向后走的方式找到每一个node应该在的位置。List的题很考验功底,因为一个不小心哪里细节没注意就会出错。

代码:

class Solution {
public:
	ListNode *insertionSortList(ListNode *head) {
		if (!head) return head;
		ListNode dummy(0);
		dummy.next = head;
		ListNode *curr = head;
		while (curr->next) {
			ListNode *temp = &dummy;
			bool moved = false;
			while (temp != curr) {
				if (temp->next->val <= curr->next->val)
					temp = temp->next;
				else {
					ListNode *next = curr->next->next;
					curr->next->next = temp->next;
					temp->next = curr->next;
					curr->next = next;
					moved = true;
					break;
				}
			}
			if (!moved) curr = curr->next;
		}
		return dummy.next;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值