Leetcode 147. Insertion Sort List

本文介绍了一种使用插入排序算法对链表进行排序的方法。通过构建一个临时链表,并逐个将原链表节点按值大小插入,实现链表的有序排列。

Sort a linked list using insertion sort.

题目大意:使用插入排序对一个链表排序。

思路:可以构建一个临时的链表,然后将待排序的链表的每一个节点插入到临时链表中

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     struct ListNode *next;
 6  * };
 7  */
 8 struct ListNode* insertionSortList(struct ListNode* head) {
 9     //如果链表为空或者只有一个节点,则直接返回
10     if(head == NULL || head -> next == NULL)
11             return head;
12     //创建一个头指针
13     struct ListNode* sortedHead = (struct ListNode*)malloc(sizeof(struct ListNode));
14     //初始化头指针的next为NULL
15     sortedHead -> next = NULL;
16     while(head != NULL){
17         //取出原链表的第一个节点,为temp
18         struct ListNode* temp = head;
19         //原链表的头指针指向下一个节点
20         head = head ->next;
21         //接下来查找temp应该插入的位置,从头开始
22         struct ListNode* cur = sortedHead;
23         while(cur -> next != NULL && cur -> next -> val < temp -> val){
24             cur = cur -> next;
25         }
26         temp -> next = cur -> next;
27         cur -> next = temp;
28     }
29     return sortedHead -> next;
30 }
 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 public:
11     ListNode* insertionSortList(ListNode* head) {
12         if(head == NULL || head -> next == NULL)
13             return head;
14         ListNode* sortedHead = new ListNode(-1);
15         while(head != NULL){
16             ListNode* temp = head;
17             head = head ->next;
18             ListNode* cur = sortedHead;
19             while(cur -> next != NULL && cur -> next ->val < temp -> val){
20                 cur = cur -> next;
21             }
22             temp -> next = cur -> next;
23             cur -> next = temp;
24         }
25         return sortedHead -> next;
26     }
27 };

 

转载于:https://www.cnblogs.com/qinduanyinghua/p/5845098.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值