代码的鲁棒性......
来源:互联网 发布:python随机数生成 编辑:程序博客网 时间:2024/05/06 14:25
又是一道牛客网的问题。View Code
描述如下:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路:
这题可以用插入排序的思想解决。如果不喜欢复杂的操作就创建一个新链表来对两个链表合并,否则可以使用其中一个链表作为插入的链表,不过那样会有很多节点断链以及修复链的操作,我使用的是新链表的方法,用空间换时间。
注:
由于在指针操作的过程中经常涉及到形参和实参的问题,在非指针操作中我们可以很容易区分,但是当时指针时常常是我们容易犯错的,这里就是注意到当用一个临时变量指向一个节点的Next指针时在对该临时变量分配内存是不会对节点的next指针分配内存的,而只是对临时变量分配内存,如果操作错误,就会造成段错误和内存泄露问题,所以特别需要注意,建议在遇到这种情况时使用直接p->next = malloc()操作的方式或使用二级指针来进行操作,而不是使用临时变量tmp=p->next,然后在tmp=malloc()的形式,这样就不容易出错了.
下面是该题的代码:
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution {10 public:11 ListNode* Merge(ListNode* pHead1, ListNode* pHead2)12 {13 14 if(pHead1 == NULL && pHead2 == NULL)15 {16 return NULL; 17 }18 19 ListNode *merge_head,*merge_list;20 merge_head = merge_list = (ListNode *)malloc(sizeof(ListNode));21 merge_head->next = NULL;22 23 if(pHead1 != NULL && pHead2 != NULL)24 {25 if(pHead1->val < pHead2->val)26 {27 merge_head->val = pHead1->val; 28 pHead1 = pHead1->next;29 }30 else31 {32 merge_head->val = pHead2->val;33 pHead2 = pHead2->next;34 }35 }36 else if(pHead1 == NULL)37 {38 merge_head->val = pHead2->val;39 pHead2 = pHead2->next;40 41 }42 else43 {//pHead2 == NULL && pHead1 != NULL44 merge_head->val = pHead1->val;45 pHead1 = pHead1->next;46 }47 48 /* 在这里赋值,后面malloc分配内存改变不了next,只是改变形参。49 * 在这里赋值,后面malloc分配内存改变不了next,只是改变形参。50 * 在这里赋值,后面malloc分配内存改变不了next,只是改变形参。51 * 重要的事情说三遍52 */53 //merge_head = merge_head->next; 54 55 while(pHead1 != NULL && pHead2 != NULL)56 {57 merge_head->next = (ListNode *)malloc(sizeof(ListNode));58 59 if(pHead1->val < pHead2->val)60 {61 merge_head->next->val = pHead1->val;62 pHead1 = pHead1->next;63 }64 else65 {66 merge_head->next->val = pHead2->val;67 pHead2 = pHead2->next;68 }69 70 merge_head = merge_head->next;71 72 } 73 74 while(pHead1 != NULL)75 {76 merge_head->next = (ListNode *)malloc(sizeof(ListNode));77 merge_head->next->val = pHead1->val;78 pHead1 = pHead1->next;79 merge_head = merge_head->next;80 }81 82 while(pHead2 != NULL)83 {84 merge_head->next = (ListNode *)malloc(sizeof(ListNode));85 merge_head->next->val = pHead2->val;86 pHead2 = pHead2->next;87 merge_head = merge_head->next;88 }89 90 return merge_list;91 92 }93 };
0 0
- 代码的鲁棒性......
- 代码的鲁棒性
- 运行代码的代码
- 运行代码的代码
- 剑指offer 算法 (代码的鲁棒性)
- 什么是代码后面的代码
- JS:运行代码的代码
- 好的代码:傻瓜型代码
- 代码框 的代码
- 网页,运行代码,复制代码,代码另存的代码
- 代码鲁棒性
- 优秀的代码 vs. 糟糕的代码
- 优秀的代码 vs. 糟糕的代码
- 什么样的代码是合格的代码
- 优秀的代码VS糟糕的代码
- 鲁棒性的获得 —— 测试函数的代码框架
- 合并两个排序的链表:专注代码的鲁棒性.
- 剑指offer:(18)代码的鲁棒性:树的子结构
- 二分查找----第一种(相同元素返回不确定哪个)
- 二分查找----(返回第一个找到的值)
- 剑指Offer:面试题31——连续子数组的最大和(java实现)
- 计算一个整数二进制中1的个数
- 已知二叉树的前序和中序遍历,重构该二叉树
- 代码的鲁棒性......
- 递归程序最难写......
- Codeforces Round #197 (Div. 2) -- D. Xenia and Bit Operations(线段树)
- 大顶堆(递归实现)
- Layer3 OSPF的LSAP和特殊区域总结
- iOS推送兼容iOS7
- iOS-FMDB事务操作SQLite数据库
- Android RecyclerView使用notifyItemRemoved()移除数据时数据错乱
- Django Admin