代码的鲁棒性......

来源:互联网 发布:python随机数生成 编辑:程序博客网 时间:2024/05/06 14:25
又是一道牛客网的问题。

描述如下:

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

解题思路:

这题可以用插入排序的思想解决。如果不喜欢复杂的操作就创建一个新链表来对两个链表合并,否则可以使用其中一个链表作为插入的链表,不过那样会有很多节点断链以及修复链的操作,我使用的是新链表的方法,用空间换时间。

注:

由于在指针操作的过程中经常涉及到形参和实参的问题,在非指针操作中我们可以很容易区分,但是当时指针时常常是我们容易犯错的,这里就是注意到当用一个临时变量指向一个节点的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 };
View Code

 

0 0
原创粉丝点击