知識點:鏈表
題目:
有兩個用鏈表表示的整數,每個結點包含一個數位。這些數位是反向存放的,也就是個位排在鏈表的首部。編寫函數對這兩個整數求和,並用鏈表形式返回結果。給定兩個鏈表ListNode* A,ListNode* B,請返回A+B的結果(ListNode*)。
思路:
1,考慮相加進位問題
2,考慮最高維可能爲1 的問題
3, 考慮A和B長度不等問題。。。哪個長直接把那個剩餘部分直接帶入A+B
代碼:
#include <iostream>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Plus {
public:
ListNode* plusAB(ListNode* a, ListNode* b) {
// write code here
ListNode *chead = NULL; //設置首結點
ListNode *pcur = chead;
ListNode *cnew ;//設置新結點
int sum = 0;
int step = 0;
while (a != NULL || b != NULL)
{
int vala = (a == NULL ? 0 : a->val);
int valb = (b == NULL ? 0 : b->val);
sum = vala + valb + step;
step = sum / 10;
cnew = new ListNode(sum%10);
if(chead == NULL) // 第一個節點
{
chead = cnew ;
pcur = chead;
}
else
{
pcur->next = cnew;
pcur = cnew;
}
a = (a == NULL ? NULL : a = a->next);
b = (b == NULL ? NULL : b = b->next);
}
//最高位可能爲1
if (step == 1)
{
cnew = new ListNode(step);
pcur->next = cnew;
cnew->next = NULL;
}
return chead;
}
};