leetcode 2 Add Two Numbers【更新】

来源:互联网 发布:威廉.菲德内尔 知乎 编辑:程序博客网 时间:2024/05/29 21:28

之前没有提交通过,主要可能是因为没有理解leetcode网站上的链表是从头节点开始存数据的,今天又重新看了一下,重新提交后通过;

需要解决的最棘手的问题是[9] +[2,9]这样的输入;

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {    struct ListNode* l3, *pnew, *tail,*p;l3 = (struct ListNode*)malloc(sizeof(struct ListNode));//创建头节点。int tmp = 0;int flag = 1;if (l3 == NULL) { //创建失败返回printf("创建失败!");return NULL;}l3->next = NULL;  //头节点指针域置NULLtail = l3;  // 开始时尾指针指向头节点 将新建的头节点当做最后一个节点while ((l1 != NULL) || (l2 != NULL) || (tmp != 0))//满足其中一个条件就继续{ //创建链表pnew = (struct ListNode*)malloc(sizeof(struct ListNode));  //创建新节点if (pnew == NULL) { //创建失败返回printf("创建失败!");return NULL;}if (l1 != NULL&&l2 != NULL){pnew->val = l1->val + l2->val + tmp;tmp = 0;}if (l1 == NULL&l2 == NULL&tmp!=0)//两个链表节点数相等,到最后一个节点后产生进位{pnew->val = tmp;tmp = 0;}if (l1!=NULL&&l2==NULL)//flag2 == 1{pnew->val = l1->val + tmp;tmp = 0;}if (l1 == NULL&&l2 != NULL){pnew->val = l2->val + tmp;tmp = 0;}if (l1 == NULL&l2 == NULL&&tmp != 0){pnew->val = tmp;tmp = 0;}if (pnew->val >= 10){pnew->val = pnew->val - 10;tmp = 1;}pnew->next = NULL;   //新节点指针域置NULL 当前新建的节点的指针域指向NULLtail->next = pnew;  //新节点插入到表尾 上一个节点的指针域指向当前新建的节点tail = pnew;   //为指针指向当前的尾节点,将当前新建的节点当做最后一个节点if (l1 != NULL&&l2 != NULL){l1 = l1->next;l2 = l2->next;}else if (l1 == NULL&l2 == NULL)//保证while可以进来{l1 = l1;l2 = l2;}else if (l1 != NULL&&l2 == NULL){l1 = l1->next;l2 = l2;}else{l1 = l1;l2 = l2->next;}}return l3->next;}


原创粉丝点击