这个是对链表操作的考察,虽然明白其思路,但是对链表的操作还是不熟练。
经过思考,对链表的操作有了理解,构建一个链表分为两步:
1、新建一个链表头结点;
2、每插入一个新节点,要进行连接,即让上一个的next成员指向新的节点。
但是对最后一步有疑问,为什么会多一个节点?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
//构建一个新链表l3,用于存储结果,在循环中对链表进行插入新节点new_node
//使用tmp_head进行连接新节点和l3链表
struct ListNode* l3, *tmp_head;
l3 = (struct ListNode*)malloc(sizeof(struct ListNode));
l3->next = NULL;
//使用这个链表指针记录每次的新节点,以便相邻的节点产生联系。
tmp_head = l3;
int sum = 0;
while(l1 != NULL || l2 != NULL)
{
l1 != NULL ? (sum = sum + l1->val, l1 = l1->next) : (sum = sum + 0);
l2 != NULL ? (sum = sum + l2->val, l2 = l2->next) : (sum = sum + 0);
struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode));
new_node->next = NULL;
new_node->val = sum %10;
tmp_head->next = new_node;
tmp_head = new_node;
sum = sum / 10;
}
//丢弃掉头结点的val值
l3 = l3->next;
return l3;
}