程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [LeetCode]Insertion Sort List

[LeetCode]Insertion Sort List

編輯:C++入門知識

[LeetCode]Insertion Sort List


Sort a linked list using insertion sort.



/**
 * 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) return head;
		int insert = 0;
		ListNode nextLeft = head;
		while (true) {
			//left左邊的node(包括left)是要被遍歷插入的,right是要被插入的node
			ListNode left = nextLeft;
			if(left == null)    break;
			ListNode right = left.next;
			if (right == null)	break;
			ListNode rnext = right.next;
			//比頭指針還小的情況
			if (right.val < head.val) {
				right.next = head;
				left.next = rnext;
				head = right;
				nextLeft = left;
				insert++;
				continue;
			}
			int index = insert;
			ListNode cur = head;
			ListNode next = head.next;
			//遍歷尋找比被插入指針小的node,插入到該node的前一node的後面
			boolean change = false;
			while (index != 0) {
				if (right.val < next.val) {
					cur.next = right;
					right.next = next;
					left.next = rnext;
					nextLeft = left;
					change = true;
					break;
				}
				cur = cur.next;
				next = next.next;
				index--;
			}
			if(!change) nextLeft = left.next;
			insert++;
		}
		return head;
	}
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved