/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* head;//定义头节点
struct ListNode* tail;//定义为节点
int data1, data2;//data1用来存放单链表1中的数据,data2用来存放单链表2中的数据
int temp;//进位标志
head = NULL;
tail = NULL;
data1=data2 = temp = 0;
//对单链表l1和L2进行遍历从而读取单链表L2和l1中的元素
while (l1 != NULL || l2 != NULL)
{
//新建立一个单链表
if (head == NULL) //若新建立的链表为空时
{
head = (struct ListNode*)malloc(sizeof(struct ListNode));//对新建的链表分配空间
head->val = 0;
head->next = NULL;
tail = head;//由于链表中没有元素,所以头结点和尾结点所指的地方是一个地方
}
else //若新建立的链表为非空的时间
{
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));//对链表next的区域分配空间
tail = tail->next;
}
if (l1 == NULL) //如果单链表l1中没有元素
{
data1 = 0;
}
else//如果单链表l1中还有元素
{
data1 = l1->val;
l1 = l1->next;
}
if (l2 == NULL)
{
data2 = 0;
}
else
{
data2 = l2->val;
l2 = l2->next;
}
tail->val = (data1+data2 + temp) % 10;
temp = (data1+data2 + temp) / 10;
tail->next = NULL;
}
if (temp == 1) { //如果还有进位,最高位应该为1
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = 1;
tail->next = NULL;
}
return head;
}
以上是我使用c语言完成的这道题,在新创建的链表中,用到了数据结构中的单链表的尾插法进行完成的。
通过这道题,我们有一次复习了单链表的尾插法,以及单链表的遍历。