leetcode_Sort List

1469 단어

설명:


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

생각:


1. 체인 테이블의 정렬은 일반적으로 만날 때마다 O(nlogn)로 이 문제를 해결하면 어떻게 해야 할지 모르겠다
2. 인터넷의 사고방식을 참고하여 귀속 순서를 정하고 귀속 방법으로 이 문제를 해결하는 것은 괜찮다는 것을 알게 되었다. 이해하기가 좀 힘들다.
3. 중요 절차: 귀속, 통합, 수조의 유효한 범위 내의 중간 노드를 찾고, 질서 있는 수조의 합병

코드:

 public ListNode sortList(ListNode head)
	{
		if(head==null||head.next==null)
			return head;
		ListNode midNode=getMidNode(head);
		ListNode newHead=midNode.next;
		midNode.next=null;
		head=mergeLists(sortList(newHead), sortList(head));
		return head;
	}

	public ListNode mergeLists(ListNode head1, ListNode head2)
	{
		if(head1==null&&head2==null)
			return head1;
		if(head1==null)
			return head2;
		if(head2==null)
			return head1;
		ListNode newHead=new ListNode(-1);
		ListNode curListNode=newHead;
		while(head1!=null&&head2!=null)
		{
			if(head1.val<head2.val)
			{
				curListNode.next=head1;
				head1=head1.next;
			}else 
			{
				curListNode.next=head2;
				head2=head2.next;
			}
			curListNode=curListNode.next;
		}
		if(head1!=null)curListNode.next=head1;
		if(head2!=null)curListNode.next=head2;
		return newHead.next;
	}

	public ListNode getMidNode(ListNode head)
	{
		if(head==null||head.next==null)
			return head;
		ListNode p=head,q=head;
		while(q.next!=null&&q.next.next!=null)
		{
			p=p.next;
			q=q.next.next;
			
		}
		return p;
	}

좋은 웹페이지 즐겨찾기