#include<iostream>
#include<string>
using namespace std;
typedef int T;
typedef struct Node{
T value;
Node* next;
Node(T x) :value(x), next(NULL){ };
}Node;//结点
Node* fun(Node *head){
T a;
do{
cin >> a;
Node* p = new Node(a);// p指向新建的结点,新结点内存放的是valueue=a,next=NULL的值
p->next = head; //p->next为p指向结点的下一个结点,即新建的结点的下一个结点。 p->next=head表示将head的地址赋值给p->next,新建的结点指向 head指向的结点;
head = p; //head的值等于p的值 表示head指向p指向的结点 从而完成连接。
} while (cin.get() != '\n');
return head;
}
Node *addTwoNumbers(Node *l1, Node *l2) {
int carry = 0;
Node* tail = new Node(0);//tail为指针变量, 指向new创建的结点;
Node* ptr = tail;//ptr 和 tail都是指针变量,不存在谁指谁,此语句相当于给ptr进行初始化 等于 tail!!
while (l1 != NULL || l2 != NULL){
int value1 = 0;
if (l1 != NULL){
value1 = l1->value;
l1 = l1->next;
}
int value2 = 0;
if (l2 != NULL){
value2 = l2->value;
l2 = l2->next;
}
int tmp = value1 + value2 + carry;
carry = tmp / 10;
ptr->next = new Node(tmp % 10);
ptr = ptr->next;
}
if (carry == 1){
ptr->next = new Node(1);
}
return tail->next; //输入5 2 3 ;2 2 2 ;得到7 4 5 后反转得到结果
}
int main(){
Node* L1 = NULL;
Node* L2 = NULL;
L1 = fun(L1);
L2 = fun(L2);
Node *L3 = NULL;
/*while ((L2 != NULL)&&(L1!=NULL)){
T sum;
sum = L1->value + L2->value;
Node *p = new Node(sum);
p->next = L3;
L3 = p;
L1 = L1->next;
L2 = L2->next;
}*/
L3 = addTwoNumbers(L1,L2);
Node *p = L3;
while (p != NULL){
cout <<p->value << " ";
p = p->next;
}
cout << endl;
return 0;
}
链表的创建、及两链表反转相加!
最新推荐文章于 2022-08-16 10:38:04 发布