[leetcode2][指针]两数相加

https://leetcode-cn.com/problems/add-two-numbers/

说实话 我觉得这种题挺恶心的 真不喜欢链表和指针这种东西 思路很简单 具体看代码

方法1:补齐后运算

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
int len1 = 1;
int len2 = 1;
ListNode *p = l1;
ListNode *q = l2;
while (p->next != nullptr)
{
len1++;
p = p->next;
}
while (q->next != nullptr)
{
len2++;
q = q->next;
}
if (len1 > len2)
{ //l1长 补l2
for (int i = 1; i <= len1 - len2; i++)
{
q->next = new ListNode(0);
q = q->next;
}
}

else
{ //l2长 补l1

  for (int i = 1; i <= len2 - len1; i++)
  {
    p->next = new ListNode(0);
    p = p->next;
  }
}
//指针归位
p = l1;
q = l2;
bool jud = 0; //记录进位
ListNode \*ans = new ListNode(1);
ListNode \*l3 = ans;
int i = 0;
while (p != nullptr && q != nullptr)
{
  i = jud + p->val + q->val;

  l3->next = new ListNode(i % 10);
  jud = i >= 10 ? 1 : 0;
  p = p->next;
  q = q->next;
  l3 = l3->next;
}
if (jud)
{
  l3->next = new ListNode(1);
  l3 = l3->next;
}
ListNode \*preDelete=ans;
ans=ans->next;
delete preDelete;
return ans;

}
};

方法2:不补齐直接算

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
ListNode* head=new ListNode(-1);
ListNode* h=head;
int sum=0;//每位相加的答案
int carry=false;//进位
while (l1!=nullptrl2!=nullptr)
{
sum=carry;//带上进位标志
//取数
if(l1!=nullptr){
sum+=l1->val;
l1=l1->next;
}
if(l2!=nullptr){
sum+=l2->val;
l2=l2->next;
}
h->next=new ListNode(sum%10);
h=h->next;
carry=sum>=10?1:0;
}
if(carry){
h->next=new ListNode(1);
}
ListNode* preDelete=head;
head=head->next;
delete preDelete;
return head;
}
};


[leetcode2][指针]两数相加
https://47.97.0.163/2021/10/30/leetcode2指针两数相加/
作者
John Doe
发布于
2021年10月30日
许可协议