剑指offer题目16:合并两个排序的链表
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解答思路
问题不难,就是实现起来比较麻烦,要注意鲁棒性,要注意两点:
- 当输入的时候也是空链表
- 某一个链表迭代完成后的话,如果另一个链表还有数据该怎么处理。
ps:这题目如果用递归会很快实现且代码简洁,就是总感觉递归容易爆内存。。而且那个取最小值的操作,我一开始想着指针指向的值会跟着p=p->next一起改变,没想到不会,卡了一会儿。。因为以往的是复制形参的指针地址,修改了地址指向的值,当然值也会改,这次我想修改的是指针本身的值,所以要加引用。
实现代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode* mergeHead = NULL;
ListNode* tempNode;
ListNode* current;
int i = 0;
while(pHead1 || pHead2) {
int temp = GetSmallNode(pHead1, pHead2);
tempNode = new ListNode(temp);
if(!i) {
mergeHead = tempNode;
current = mergeHead;
} else {
current->next = tempNode;
current = current->next;
}
i++;
}
return mergeHead;
}
// 获取两个链表最大的值,因为是要修改指针本身,所以需要加引用或者指针的指针
int GetSmallNode(ListNode* &pHead1, ListNode* &pHead2) {
ListNode* current;
if(pHead1 == NULL){
current = pHead2;
pHead2 = pHead2->next;
} else {
if(pHead2 == NULL){
current = pHead1;
pHead1 = pHead1->next;
}
else {
if(pHead1->val > pHead2->val) {
current = pHead2;
pHead2 = pHead2->next;
} else {
current = pHead1;
pHead1 = pHead1->next;
}
}
}
return current->val;
}
};
作者:大傻逼
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号