单向链表插入排序 Java

4 篇文章 0 订阅
2 篇文章 0 订阅

游动指针h ; 待插入节点指针pt

节点插入关键:h.next = pt; 不可能是h = pt, 链到指针的末尾没用呀,要链到节点末尾


默认无头结点,无头结点的思路:

       三种可能

1. 比较头部

2. 循环比较中间

3. 追加末尾

为何比较头节点:因为循环中间部分的时候没有比较头节点 

while (h.next != null) { //比较有序部分


整体代码:

package linkedList;

/**
 * Definition for singly-linked list. 
 * public class ListNode 
 * { 
 *     int val; 
 *     ListNode next;
 *     ListNode(int x) { 
 *           val = x; 
 *           next = null;
 *     } 
 * }
 * @
 */
public class Solution {
	
	public ListNode insertionSortList(ListNode head) {
		if (head == null || head.next == null)
			return head;

		ListNode c = head.next;  //未排序游动指针C
		head.next = null;  
		ListNode pt, h;   //pt:临时节点指针,h:已排序部分游动指针

		while (c != null) {

			pt = c;
			c = c.next;
			pt.next = null;

			if (head.val > pt.val) { //比较头部
				pt.next = head;
				head = pt;
				continue;
			}

			h = head;
			while (h.next != null) { //比较有序部分
				if (h.next.val > pt.val) {
					pt.next = h.next;
					h.next = pt;
					break;
				}

				h = h.next;
			}

			if (h.next == null) { //追加末尾
				h.next = pt;
			}
		}

		return head;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值