C day 2

leetcode:Add Two Numbers


2019-04-04  20:26:28 

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807

我的代码:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
        struct ListNode *p, *q;
    p = (struct ListNode *)malloc(sizeof(struct ListNode));
    q = (struct ListNode*)malloc(sizeof(struct ListNode));
    p = l1->next;
    q = l2->next;
    struct ListNode *L3 = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode *m = L3;
    int tag = 0;//表示进位
    while (q != NULL && p != NULL) {
        struct ListNode *n = (struct ListNode*)malloc(sizeof(struct ListNode));
        n->val = p->val + q->val+tag;
        if (n->val > 9) {
            tag = n->val / 10;
            n->val = n->val % 10;
        }
        n->next = NULL;
        m->next = n;
        m = m->next;
        q = q->next;
        p = p->next;
    }
    struct ListNode  *p1;
    p1= (struct ListNode *)malloc(sizeof(struct ListNode));
    p1->next = NULL;
    p1 = L3->next;
    return p1;
}

在自己的vs里面调试什么的都没有问题,但是一在leetcode的运行环境中就不行了。

Line 70: Char 15: runtime error: member access within misaligned address 0xbebebebebebebebe for type 'struct ListNode', which requires 8 byte alignment (ListNode.c) 0xbebebebebebebebe: note: pointer points here <memory cannot be printed>

弄过了很久也没有弄出来。(果断去参考大佬的了)

int x,y;
    int sum=0;
    int c=0;
    
    struct ListNode* head;
    struct ListNode* ptr;
    head=(struct ListNode*)malloc(sizeof(struct ListNode));
    x=l1->val;
    y=l2->val;
    head->val=(x+y)%10;
    c=(x+y)/10;
    l1=l1->next;
    l2=l2->next;
    ptr=head;
    
    while(l1 || l2)
    {
        x=0;
        y=0;
        if(l1)
        {
            x=l1->val;
            l1=l1->next; 
        }
        
        if(l2)
        {
            y=l2->val;
            l2=l2->next;
        }
        
        sum=x+y;
        ptr->next=(struct ListNode*)malloc(sizeof(struct ListNode));
        ptr=ptr->next;
        ptr->val=(sum+c)%10;
        c=(sum+c)/10;   
    }
    if(c)
    {
        ptr->next=(struct ListNode*)malloc(sizeof(struct ListNode)); 
        ptr=ptr->next;
        ptr->val=c;
    }
    ptr->next=NULL;

    return head; 

ok,good day~

原文地址:https://www.cnblogs.com/sece/p/10656948.html