合并两个单向链表
来源:互联网 发布:77pepecom现在域名 编辑:程序博客网 时间:2024/05/30 05:12
问题一:现在有链表A和链表B,都已经升序排列,将A和B合并后也按升序排列。
算法思路一:在链表A中分别取出每个结点,再分别与链表B中的结点进行比较,找到适当位置后插入。这种算法时间复杂度太高,假如链表A和;链表B的长度分别是m和n,那么复杂度就是O(m*n)。
算法思路二:链表A和链表B分别有两个指向当前结点的指针pAHead和pAHead,每次比较当前的这两个结点,谁小就把谁假如到第三个新链表中,然后小的这个链表的指针继续后移,最坏的时间复杂度是O(m+n)。
下面这个算法是针对思路二的解法,接下来会给出两个非有序排列的链表进行排序的算法。今天先到这里,连着几天熬夜码代码有点扛不住~晚安各位加油~
图1.合并前合并后
图2.合并过程
struct ListNode { int m_value; struct ListNode * m_pNext;};
//打印链表void printdata(struct ListNode * p) { while (p!= NULL) { printf("%d",p->m_value); p = p->m_pNext; } printf("\n");}
//创建链表struct ListNode * creatListNode(int n){ struct ListNode * pHead = malloc(sizeof(struct ListNode)); struct ListNode * tempNode = pHead; for (int i = 1; i<=n; i++) { struct ListNode * p = malloc(sizeof(struct ListNode)); p->m_value = i; tempNode ->m_pNext = p; tempNode = p; } tempNode->m_pNext = NULL; return pHead;}
//合并链表struct ListNode * Merge(struct ListNode * pAHead,struct ListNode * PBHead){ if (pAHead == NULL) { return PBHead; } if (PBHead == NULL) { return pAHead; } struct ListNode * pMergeHead = NULL; if (pAHead->m_value<PBHead->m_value) { pMergeHead = pAHead; pMergeHead->m_pNext = Merge(pAHead->m_pNext, PBHead); } else { pMergeHead = PBHead; pMergeHead->m_pNext = Merge(pAHead, PBHead->m_pNext); } return pMergeHead;}
//主函数调用int main(int argc, const char * argv[]) { // insert code here... struct ListNode * pAhead = creatListNode(5); printdata(pAhead); struct ListNode * pBhead = creatListNode(5); printdata(pBhead); struct ListNode * pMergeHead = Merge(pAhead, pBhead); printdata(pMergeHead); return 0;}
0 0
- 合并两个单向链表
- 合并两个有序单向链表
- 合并两个排好序的单向链表
- 两个有序单向链表的合并
- 两个升序单向链表的合并
- 将两个单向有序链表合并成一个单向有序链表
- 《单向链表》----------------------合并,反转
- leetcode 21. Merge Two Sorted Lists 两个单向链表合并 指针与解指针
- 链接两个单向链表
- 单向循环链表的合并图解
- 单向循环链表 初始化 合并
- 合并两个单向有序(升序)链表
- 合并两个链表
- 合并两个链表
- 合并两个链表
- 合并两个链表
- 合并两个链表
- 合并两个链表
- HDOJ--1248|寒冰王座
- 程序运行的时间的估算
- [hihocoder1032]最长回文子串
- DPDK中文-DPDK的ring
- 【Leetcode】77. Combinations
- 合并两个单向链表
- PL/SQL错误提示 database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
- substance在java swing中使用注意事项
- Android 提示框Toast不显示的问题
- 欢迎使用CSDN-markdown编辑器
- 代码优化
- Java 学习笔记 Day003
- 视频前背景分离论文之(2) GOSUS: Grassmannian Online Subspace Updates with Structured-sparsity
- 结构体的初始化