题解 | #链表相加(二)#

链表相加(二)

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

用原来的链表内存空间,省了一些内存。 思路就是如果一开始连接的短的链表,则最后将短链表尾部指向长链表长的一段

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    ListNode *reverseList(ListNode *head){
        ListNode *pre=nullptr,*temp=head;
        while(head!=nullptr){
            temp=head->next;
            head->next=pre;
            pre=head;
            head=temp;
        }
        return pre;
    }
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        // write code here
        int flag=0;    //进位标识
        int num=0;
        ListNode *rh1=reverseList(head1);
        ListNode *rh2=reverseList(head2);
        ListNode *newhead=new ListNode(0);
        newhead->next=rh1;
        while(rh1->next!=nullptr && rh2->next!=nullptr){    //会剩下最后一个节点没作和
            num=rh1->val+flag+rh2->val;
            rh1->val=num%10;
            flag=num/10;
            rh1=rh1->next;
            rh2=rh2->next;
        }
        if(rh1->next==nullptr)
            rh1->next=rh2->next;        //若一开始将短的链表选作头,需要连接长的一段
        num=rh1->val+flag+rh2->val;
        rh1->val=num%10;
        flag=num/10;
        rh1=rh1->next;
        if(flag==0)
            return reverseList(newhead->next);
        while(rh1->next!=nullptr){        //留下最后一个结点
            num=rh1->val+flag;
            rh1->val=num%10;
            flag=num/10;
            rh1=rh1->next;
        }
        num=rh1->val+flag;                //处理最后的结点
        rh1->val=num%10;
        flag=num/10;
        if(flag>0){                        //结束后flag不为0,创建一个新的结点
            ListNode *p=new ListNode(flag);
            rh1->next=p;
        }
        return reverseList(newhead->next);
    }
};
全部评论

相关推荐

asdasdasdasdas:19岁,不容易啊可能升个本会好点,现在学历歧视太严重了
点赞 评论 收藏
分享
04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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