2. 写程序对单链表进行排序.(写核心代码) 如: 插入为3,6,1,5,4,2,7,0 排序后:0,1,2,3,4,5,6,7 或者 写出程序删除单链表中的所有节点 (两题选一道)
时间: 2023-08-15 13:08:42 浏览: 70
单链表排序的核心代码如下:
```
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* sortList(ListNode* head) {
if (!head || !head->next) return head;
ListNode *slow = head, *fast = head->next;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
ListNode* mid = slow->next;
slow->next = NULL;
return merge(sortList(head), sortList(mid));
}
ListNode* merge(ListNode* l1, ListNode* l2) {
ListNode dummy(0), *tail = &dummy;
while (l1 && l2) {
if (l1->val < l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
tail->next = l1 ? l1 : l2;
return dummy.next;
}
```
这里使用归并排序来对单链表进行排序,时间复杂度为 O(nlogn)。
如果要删除单链表中的所有节点,可以使用如下代码:
```
void deleteList(ListNode* head) {
while (head) {
ListNode* temp = head;
head = head->next;
delete temp;
}
}
```
这里使用循环遍历单链表,每次删除头节点,并释放内存。
阅读全文