leetcode-插入排序

leetcode插入排序

链表的插入排序,最简单的方法定义3个指针,链表首节点,访问的当前节点,排序好的尾节点,1.通过访问节点与首节点相比,比首节点的值小于或等于,则插入链表之前。2,与排序好的尾节点相比,大于或等于,在插入排序后的尾节点之后。3,在链表中间,则从首节点一路访问,直到找到合适的位置。此思路是借鉴博主天涯海角的,简单明了,作为学习记录。代码如下。

/**
 * 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==NULL)
          return head;
        ListNode* newHead=head; //链表首节点
        ListNode* cur=head->next;//访问当前节点
        ListNode* last=head;//排序后的尾节点
        while(cur)
        {
            if(cur->val>=last->val)
            {
                cur=cur->next;
                last=last->next;
            }
            else if(cur->val<=newHead->val)
            {
                last->next=cur->next;
                cur->next=newHead;
                newHead=cur;
                cur=last->next;
            }
            else 
            {
                head=newHead;
                while(head->next && head->next->val<cur->val)
                {
                    head=head->next;
                }
                last->next=cur->next;
                cur->next=head->next;
                head->next=cur;
                cur=last->next;
            }
            
        }
        return newHead;
    }
        
};

你可能感兴趣的:(leetcode-插入排序)