leetcode第二题及 pointer points here memory cannot be printed

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode *p = l1,*q = l2,*r;
    struct ListNode *p1 = l1,*q1 = l2;
    struct ListNode* l = (struct ListNode*)malloc(sizeof(struct ListNode));
    l->next = 0;
    int length1 = 0,length2 = 0,add = 0;
    while(p1 != 0){
        length1++;
        p1 = p1->next;
    }
     while(q1 != 0){
        length2++;
        q1 = q1->next;
    }
    if(length1 >=length2){
        while(q != 0){
            add += p->val + q->val;
            if(add >= 10){
                p->val =add-10;
                add = 1;
            }
            else{
                p->val =add;
                add = 0;
            }
            r = p;
            p = p->next;
            q = q->next;
        }
        while(p !=0){
            add +=p->val;
            if(add >= 10){
                p->val =add-10;
                add = 1;
            }
            else{
                p->val =add;
                add = 0;
            }
            r = p;
            p = p->next;
        }
        if(add){
            l->val = 1;
            r->next = l;
            l->next == 0;
        }
        return l1;
    }
    else{
        while(p != 0){
            add += q->val + p->val;
            if(add >= 10){
                q->val =add-10;
                add = 1;
            }
            else{
                q->val =add;
                add = 0;
            }
            r = q;
            q = q->next;
            p = p->next;
        }
        while(q !=0){
            add +=q->val;
            if(add >= 10){
                q->val =add-10;
                add = 1;
            }
            else{
                q->val =add;
                add = 0;
            }
            r = q;
            q = q->next;
        }
        if(add){
            l->val = 1;
            r->next = l;
            l->next == 0;
        }
        return l2;
    }
}

一、第二题先求两个链表的长度length1和length2,在长的链表中做加法

二、长链表与短链表第一个数相加,如果相加之和小于10,则把值赋给长的链表;若大于等于10则把个位数赋给长链表,并记进位符add为1.

三、长短链表第二个数相加并加上进位符,以此类推。若短链表所有值加完,长链表中还有数,长链表中值加add(例:8->5->1->1 + 2->4 = 0-> 0->2->1,短链表完成,进位符为1,第三位为2,此时进位符为0,第四位不变为1)

四、若两链表相加后,长度大于长的链表,则再开辟一个节点“l”储存进位符(例9->9->9 + 1 = 0-> 0->0->1)。注意:新开辟的“l”中next指针未指向任何空间,可能出现runtime error: member access within misaligned address 0xbebebebebebebebe for type ‘struct ListNode’, which requires 8 byte alignment (ListNode.c) 0xbebebebebebebebe: note: pointer points here 错误,应该添加l->next = NULL;

你可能感兴趣的:(leetcode第二题及 pointer points here memory cannot be printed)