题解 | 链表相加(二)

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head1 ListNode类 
 * @param head2 ListNode类 
 * @return ListNode类
 */
#include <stdlib.h>
struct ListNode* reverse(struct ListNode* head){
    struct ListNode *cur=head,*pre=NULL;
    while(cur!=NULL){
        struct ListNode *temp=cur->next;
        cur->next=pre;
        pre=cur;
        cur=temp;
    }
    return pre;
}

struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {
    // write code here
    if(head1==NULL) return head2;
    if(head2==NULL) return head1;
    head1=reverse(head1);//反转链表
    head2=reverse(head2);
    struct ListNode *Head=malloc(sizeof(struct ListNode));//生成链表的头节点
    struct ListNode *nHead=Head;//设置nHead指针遍历新链表,保留Head作为新链表的头节点,以便后续反转链表时可以直接传入Head节点
    int tmp=0;//进位初始置零
    while(head1!=NULL || head2!=NULL){//链表长度不一致时,多出来的节点也要加入计算。注意!!!不要使用&&(并且)
        int val=tmp;//节点的val等于val值加进位
        if(head1!=NULL){
            val+=head1->val;
            head1=head1->next;
        }
        if(head2!=NULL){
            val+=head2->val;
            head2=head2->next;
        }
        tmp=val/10;//进位值更新
        nHead->next=(struct ListNode*)malloc(sizeof(struct ListNode));//注意!!!第一个括号内必须带*号
        nHead->next->val=val%10;//新节点赋值
        nHead=nHead->next;//nHead指针后移
    }
    if(tmp>0){//当计算完所有节点后还有进位再加一个节点
        nHead->next=(struct ListNode*)malloc(sizeof(struct ListNode));
        nHead->next->val=tmp;
    }
    return reverse(Head->next);
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务