小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

题目

Sort a linked list using insertion sort.

分析

实现链表的插入排序

注意:

  1. 程序入口的特殊输入判断处理!
  2. 节点的链接处理,避免出现断链!

AC代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

class Solution {
public:
    ListNode* insertionSortList(ListNode* head) {
        if (head == NULL || !head->next)
            return head;

        ListNode *p = head->next;
        head->next = NULL;
        //从头结点的下一节点开始,遍历插入排序
        while (p)
        {
            //保存p节点的后续节点
            ListNode *r = p->next;

            //判断是否应插入到头结点
            if (p->val < head->val)
            {
                p->next = head;
                head = p;
            }
            else{
                //寻找p节点应插入位置的前驱
                ListNode *pre = head;
                while (pre->next && pre->next->val <= p->val)
                {
                    pre = pre->next;
                }
                p->next = pre->next;
                pre->next = p;
            }
            //循环下一节点的插入
            p = r;
        }//while
        return head;
    }
};

GitHub测试程序源码

posted on 2015-10-27 13:00  Coding菌  阅读(128)  评论(0编辑  收藏  举报