男科医院网站模板,网页制作资料,济南手机网站开发,网站正在建设中英语怎么说⭐️ 题目描述 #x1f31f; leetcode链接#xff1a;面试题 02.05 链表求和
ps#xff1a; 首先定义一个头尾指针 head 、tail#xff0c;这里的 tail 是方便我们尾插#xff0c;每次不需要遍历找尾#xff0c;由于这些数是反向存在的#xff0c;所以我们直接加起来若…⭐️ 题目描述 leetcode链接面试题 02.05 链表求和
ps 首先定义一个头尾指针 head 、tail这里的 tail 是方便我们尾插每次不需要遍历找尾由于这些数是反向存在的所以我们直接加起来若大于等于 10 则进位进位的数字加到下一位的数字和上需要注意的是当任意一个链表结束后另一个链表可能还有余项还需要检查是否有不为空的链表继续重复上面的操作。还有一种特殊的情况是5 5 10 两个链表只有一个数而且两个链表的 val 相加后是同时都为空但是进位还有一个 1 所以还要判断这种特殊情况。
代码
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){struct ListNode* head NULL; // struct ListNode* tail NULL;int unit 0;while (l1 l2) {int sum l1-val l2-val;// 尾插struct ListNode* newNode (struct ListNode*)malloc(sizeof(struct ListNode));newNode-val (sum % 10 unit) % 10;newNode-next NULL;if (head NULL) {head tail newNode;} else {tail-next newNode;tail newNode;}// 检查if ((sum unit) 10) {unit 1; // 进位} else {unit 0;}// 迭代l1 l1-next;l2 l2-next;}// 结束可能会有一个链表还有节点struct ListNode* empty l1;struct ListNode* noneEmpty l2;if (l1 ! NULL) {noneEmpty l1;empty l2;}// 遍历当前非空链表while (noneEmpty) {struct ListNode* newNode (struct ListNode*)malloc(sizeof(struct ListNode));newNode-val (noneEmpty-val unit) % 10;newNode-next NULL;tail-next newNode;tail newNode;// 检查if ((noneEmpty-val unit) 10) {unit 1; // 进位} else {unit 0;}noneEmpty noneEmpty-next;}// 结束可能进位还存在if (unit) {struct ListNode* newNode (struct ListNode*)malloc(sizeof(struct ListNode));newNode-val unit;newNode-next NULL;tail-next newNode;}return head;
}