148.排序链表(LeetCode)(C语言)(链表)(中等)

O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5

我的方法是不移动链表中的结点,直接交换节点中的数据。这种方式逻辑相对简单,但时间复杂度不是很好。其实还可以用归并排序,但我现在对该种算法还不是特别熟悉,等熟悉后再来更新用归并排序的解法。

/** 
Definition for singly-linked list. 
struct ListNode { 
	int val;
	struct ListNode *next;
};
**/
struct ListNode* sortList(struct ListNode* head){    
	int t;    
	struct ListNode * p,* q;    
	if (head == NULL) return head;
	p = q = head;    
	while (p->next) {        
		while (q) {            
			if (q->val < p->val) {
				t = p->val;                
				p->val = q->val;                
				q->val = t;            
			}
			q = q->next;        
		}        
		p = p->next;        
		q = p;
	}
	return head;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值