LeetCode: Insertion Sort List [147]

【题目】

Sort a linked list using insertion sort.

【题意】

用插入排序方法排序链表

【思路】

直接搞

【代码】

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* insert(ListNode*head, ListNode*node){
        if(head==NULL){
            node->next=NULL;
            return node;
        }

        ListNode*prev = NULL;
        ListNode*cur = head;
        while(cur){
            if(cur->val>node->val){
                //插入
                if(prev==NULL){
                    //插到链表头
                    node->next=head;
                    head = node;
                }
                else{
                    //插到链表中
                    node->next=prev->next;
                    prev->next=node;
                }
                return head;
            }
            else{
               prev=cur;
               cur=cur->next;
            }
        }
        //插到链表尾
        prev->next=node;
        node->next=NULL;
        return head;
    }

    ListNode *insertionSortList(ListNode *head) {
        if(head==NULL || head->next==NULL)return head;
        ListNode*newhead=NULL;
        ListNode*cur=head;
        ListNode*next=NULL;
        while(cur){
            next=cur->next;
            newhead=insert(newhead, cur);
            cur=next;
        }
        return newhead;
    }
};

LeetCode: Insertion Sort List [147]

时间: 2024-08-09 20:48:37

LeetCode: Insertion Sort List [147]的相关文章

LeetCode Insertion Sort List

class Solution { public: ListNode *insertionSortList(ListNode *head) { if (head == NULL) return NULL; ListNode* sorted_head = head; ListNode* unsorted_head = head->next; head->next = NULL; ListNode* cur = unsorted_head; while (cur != NULL) { unsorte

[leetcode]Insertion Sort List @ Python

原题地址:http://oj.leetcode.com/problems/insertion-sort-list/ 题意:对链表进行插入排序. 解题思路:首先来对插入排序有一个直观的认识,来自维基百科. 代码循环部分图示: 代码: class Solution: # @param head, a ListNode # @return a ListNode def insertionSortList(self, head): if not head: return head dummy = Lis

leetcode——Insertion Sort List 对链表进行插入排序(AC)

Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *result; result->val = INT_MIN; result->next = NULL; ListNode *cur=head,*

LeetCode :: Insertion Sort List [详细分析]

Sort a linked list using insertion sort. 仍然是一个非常简洁的题目,让我们用插入排序给链表排序:这里说到插入排序,可以来回顾一下, 最基本的入门排序算法,就是插入排序了:时间复杂度为n^2,最基本的插入排序是基于数组实现的,下面给出基于数组实现的插入排序,来体会一个插入排序的思想: 以下仅为数组实现,不是解题代码,没兴趣可以跳过. void insertionsort (int a[], int N) { for (int i = 1; i < N; i+

[LeetCode]Insertion Sort

Sort a linked list using insertion sort. 这道题是要求用插入排序的方式对单链表进行排序. 先不考虑边界情况: 1. 将第一个结点看做有序区,之后的所有结点看做无序区. 2. 从第二个结点p开始,遍历有序区,知道遇到比结点p值大的结点q,将结点p插入到结点q之前. 3. 重复上述步骤直到链表遍历结束. 需要注意的是: 1. 遍历无序区时,需要保存当前结点的后继结点,以防指针丢失. 2. 若原链表为空,则直接返回NULL. 下面贴上代码: /** * Defi

LeetCode Insertion Sort List 链表插入排序

题意:给一个链表,实现插入排序. 思路:O(1)空间,O(n*n)复杂度.将排好的用另一个链表头串起来,那个链表头最后删掉,再返回链表. 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 pub

Leetcode 147. Insertion Sort List 插入排序 in Java

147. Insertion Sort List Total Accepted: 80869 Total Submissions: 263074 Difficulty: Medium Sort a linked list using insertion sort. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { va

leetcode 147. Insertion Sort List (Python版)

题目: Sort a linked list using insertion sort. 大意是要实现一个链表的插入排序 算法思路:     从原链表中逐个弹出一个node 对于每一个node用插入排序的思想插入新的升序排列的链表中 这里有一个小trick,leetcode有一组数据是1~4999的升序序列,如果我们采用如上方法会超时 于是我们在插入排序的时候设置一个last位,记录当前插入的位置 在下一次插入的时候与上次插入位置last比较,如果当前node.val > last.val,那么

Java for LeetCode 147 Insertion Sort List

Sort a linked list using insertion sort. 解题思路: 插入排序,JAVA实现如下: public ListNode insertionSortList(ListNode head) { if(head==null||head.next==null) return head; ListNode root=new ListNode(Integer.MIN_VALUE); root.next=head; head=head.next; root.next.nex