leetcode两数相加 完整代码 c语言
时间: 2023-09-09 13:00:57 浏览: 135
```c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* head = NULL;
struct ListNode* tail = NULL;
int carry = 0;
while(l1 != NULL || l2 != NULL){
int n1 = (l1 != NULL) ? l1->val : 0;
int n2 = (l2 != NULL) ? l2->val : 0;
int sum = n1 + n2 + carry;
carry = sum / 10;
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = sum % 10;
newNode->next = NULL;
if(head == NULL){
head = newNode;
tail = newNode;
}else{
tail->next = newNode;
tail = newNode;
}
if(l1 != NULL){
l1 = l1->next;
}
if(l2 != NULL){
l2 = l2->next;
}
}
if(carry > 0){
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = carry;
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
}
return head;
}
```
这是leetcode题目“两数相加”的完整C语言解法。首先定义了一个结构体`ListNode`来表示单链表的结点。然后,我们使用头尾指针`head`和`tail`来创建新的结果链表。我们还定义了一个变量`carry`来保存进位值。
在循环中,我们分别取出两个链表当前结点的值,并与进位值相加。如果链表的长度不一致,我们使用0来代替较短链表的缺失结点值。然后,我们将求和结果的个位数作为新结点的值,并更新进位值。
接着,我们创建新结点并将其加入结果链表中。第一个新结点既是头指针也是尾指针,而后续新结点都仅作为尾指针的next指向。
最后,如果进位值大于0,我们将其作为新结点加入结果链表的尾部。
最后返回头指针head即可。
阅读全文