#2 链表实现加减法

这次很遗憾,自己连稀烂的代码也写不了了。。。
直接粘别人的代码过来学习
太难了

不使用递归的方法:

 /**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
	ListNode Ln(0),*p=&Ln;
        int flag=0;
        while(l1||l2||flag){
            int temp=0;
            if(l1!=nullptr)temp+=l1->val;
            if(l2!=nullptr)temp+=l2->val;
            temp+=flag;      
                          
            flag=temp/10;
            temp%=10; 
                              
            ListNode *ptr=l1?l1:l2;
            if(ptr==nullptr)ptr=new ListNode(temp);
            ptr->val=temp;
            p->next=ptr;
            p=p->next;
            l1=l1?l1->next:nullptr;
            l2=l2?l2->next:nullptr;
     	     }
            return Ln.next;
            }
        };

此程序有几个关键步骤

  1. 定义空链表存储数据,使用指针操作
  2. 进行运算
  3. 循环内完成本轮结束将运算环节推入下一环节
  • 需要注意一点
 p->next=ptr;
 p=p->next;

这里为什么要费事使用p的后继而不是直接使用p?

因为注意函数的返回类型 *ListNode,如果直接使用p的话无法找到合适的值去返回。所以全部对本轮元素p的后继操作,返回的时候返回后继的指针就可以了。

你可能感兴趣的:(C/C++,pratice)