leedcode——链表插入排序

题目:Sort a linked list using insertion sort.

思路:定义一个临时链表存放已排序好的链表,将未排序好的节点依次插入。

链表元素:1,3,8,4,6,5,2

(递归到最后一个节点2)

第一轮:temp链表元素为2,head 为5,操作:将5插入到2后面

第二轮:temp链表元素为2,5,head为6,操作:将6插入到5后面

第三轮:temp链表元素为2,5,6,head为4,操作:将4插入到2后面

...

最后一轮:temp链表元素为1,2,3,4,5,6,8

代码:

class Solution {
public:
    ListNode *insertionSortList(ListNode *head) {
        if(head == NULL || head->next == NULL) return head;//空链表或只有一个头结点的链表直接返回
        ListNode *temp = new ListNode(0);//定义一个临时链表
        ListNode *p = temp;
        temp->next = insertionSortList(head->next);//递归将已排序好的链表插入临时链表
        while(p != NULL && p->next != NULL && head->val > p->next->val){//为head找一个合适的位置
            p = p->next;
        }
        head->next = p->next;//插入head元素
        p->next = head;
        return temp->next;//返回临时链表
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值