关闭

【Leetcode】Sort List

212人阅读 评论(0) 收藏 举报
分类:

题目链接:https://leetcode.com/problems/sort-list/

题目:

Sort a linked list in O(n log n) time using constant space complexity.

思路:

用归并排序,难点在递归划分链表中点。本题解答参考了网络答案。

算法:

	public ListNode sortList(ListNode head) {
		if(head==null||head.next==null)
			return head;
		ListNode fast = head,slow = head,l2 = null;
		//fast走两步,slow走一步,当fast到达表尾时,slow在链表中间位置
		while(fast.next!=null&&fast.next.next!=null){
			slow = slow.next;
			fast = fast.next.next;
		}//此时fast在表尾,slow在中间
		l2 = slow.next; //第二条链表表头
		slow.next = null; //断开

		head = sortList(head);//分冶
		l2 = sortList(l2);
		
		return mergeTwoLists(l2, head);//合并
	}
	
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = null,l,p = l1,q = l2;
		//==确定头节点
		if(p!=null&&q!=null){
			if(p.val<q.val){
				head = p;
				p = p.next;
			}else{
				head = q;
				q = q.next;
			}
		}else if(p==null){
			head = q;
			return head;
		}else if(q==null){
			head = p;
			return head;
		}
		l = head; 
		//===end
		
		while(p!=null&&q!=null){
			if(p.val<q.val){
				l.next = p;
				l = p;
				p = p.next;
			}else{
				l.next = q;
				l = q;
				q = q.next;
			}
		}
		
		if(p==null){
			l.next = q;
		}else if(q==null){
			l.next = p;
		}
			
		return head;
    }


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:523432次
    • 积分:8275
    • 等级:
    • 排名:第2610名
    • 原创:305篇
    • 转载:6篇
    • 译文:0篇
    • 评论:38条
    博客专栏
    文章分类
    最新评论