您的位置:首页 > 其它

lintcode——链表插入排序

2017-03-29 00:08 288 查看

1.题目

       用插入排序对链表排序   

     Given
1->3->2->0->null
, return
0->1->2->3->null


2.思路

    第一遍循环时不进行while循环,开始将原链表头节点断开尾插到新建链表中,原链表头指针下移到第二个元素。

    从第二遍循环开始,将新旧链表中元素开始比较大小  ①若旧链表中现在的头节点值小于新链表最后一个元素则尾插进去;②若旧链表中现在的头节点值大于新链表最后一个元素,则不进行while,将旧链表中操作元素插入到新链表最后元素的前一个。 

3.代码

/**

 * Definition of ListNode

 * class ListNode {

 * public:

 *     int val;

 *     ListNode *next;

 *     ListNode(int val) {

 *         this->val = val;

 *         this->next = NULL;

 *     }

 * }

 */

class Solution {

public:

    /**

     * @param head: The first node of linked list.

     * @return: The head of linked list.

     */

    ListNode *insertionSortList(ListNode *head) {

        // write your code here

        ListNode *dummy=new ListNode(0);

        while(head!=NULL)

        {

            ListNode *Node=dummy;

            while(Node->next!=NULL&&Node->next->val<head->val)

            { Node=Node->next;}

            ListNode *T=head->next;

            head->next=Node->next;

            Node->next=head;

            head=T;

        }

        return dummy->next;

                }

};

       

4.感想

          这个题的思路我写的很详细,几乎解释了每一句代码的操作,也是为了方便自己巩固。因为这道题是我用时最多的一道题了,感觉插入的时候挺绕的,写着写着就把自己绕晕了,我觉得这道题掌握了对于写其他题目有很大帮助!    

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: