leetcode之Insertion Sort List

Insertion Sort List ,即用插入的方法排序链表。

主要思想:先从原始链表list摘掉一个节点,然后判断这个节点应该插入在sortedList的表头,中间,还是表尾。循环此步骤,直到原始链表为空。

源代码如下:

import java.util.Random;

public class InsertionSortLinkedList {
	public ListNode insertionSortList(ListNode head)
	{
		if(head == null || head.next == null)
			return head;
		ListNode sortedHead = head; //用p指向有序链表的第一个节点
		
		head = head.next;
		sortedHead.next = null;
		ListNode currentNode = null;  //当前待插入的节点
		ListNode sortedNode = sortedHead; //游走在有序链表的指针
		ListNode preSortedNode = sortedNode; //sortedNode的前驱
		while(head != null)
		{
			currentNode = head;
			head = head.next;
			currentNode.next = null;  //把当前节点从原始链表中摘出来
			while(sortedNode != null && currentNode != null)
			{
				if(sortedHead.val >= currentNode.val) //如果插入点在链表的开始处
				{
					currentNode.next = sortedHead;
					sortedHead = currentNode;
//					currentNode = null;
					break;
				}
				else if(sortedNode.val < currentNode.val)
				{
					preSortedNode = sortedNode;
					sortedNode = sortedNode.next;
				}else{
					currentNode.next = preSortedNode.next;
					preSortedNode.next = currentNode;
					break;
//					currentNode = null;
				}
			}
			if(sortedNode == null)  //插入点在链表表尾
			{
				preSortedNode.next = currentNode;
			}
			sortedNode = sortedHead;
			currentNode = null;	
		}
		return sortedHead;
	}

	public static void main(String[] args)
	{
		Random rand = new Random();
		ListNode head = null;
		ListNode currentNode = null;
		for(int i = 0 ; i < 10; i ++)
		{
			if(head == null)
			{
				head = new ListNode(rand.nextInt(47));
				currentNode = head;
			}else{
				currentNode.next = new ListNode(rand.nextInt(47));
				currentNode = currentNode.next;
			}
		}
//		System.out.println("ok!");
		InsertionSortLinkedList isll = new InsertionSortLinkedList();
		ListNode result = isll.insertionSortList(head);
		while(result != null)
		{
			System.out.print(result.val + " ");
			result = result.next;
		}
//		System.out.println("ok!");
	}
}

//class ListNode {
//    int val;
//    ListNode next;
//    ListNode(int x) {
//        val = x;
//        next = null;
//   }
//}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值