• [LeetCode] Add Two Numbers(stored in List)


    首先,演示一个错误的reverList

     1 class Solution {
     2     public:
     3         ListNode* reverse(ListNode* root)
     4         {
     5             if(NULL == root)
     6                 return NULL;
     7             ListNode* pCur = root;
     8             ListNode* pNext = root->next;
     9 
    10             while(pNext)
    11             {
    12                 pNext = pNext->next;
    13                 pCur->next->next = pCur;
    14                 pCur = pCur->next;
    15             }
    16             root->next = NULL;
    17             return pCur;
    18         }
    19 
    20 };

    (2)--------->(3)-------->(4)----------->(5)--------->NULL

    首先pCur指向2,pNext指向3;

    pNext=pNext->next; pNext指向4,

    pCur->next->next = pCur,然后3--->4 的指针断了, 从此pCur就自己转圈了。。。

    正确的reverseList

    ListNode * reverseList(ListNode* head)
    {
        if(head == NULL) return NULL;
    
        ListNode *pre = NULL;
        ListNode *cur = head;
        ListNode *next = NULL;
    
        while(cur)
        {
            next = cur->next;
            cur->next = pre;
    
            pre = cur;
            cur = next;
        }
    
        return pre;
    
    }

    这个题目也不难,注意dummy节点的使用,另外,记得最后carrybit的处理

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
    
            ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
            {
                if(l1 == NULL)
                    return l2;
                if(l2 == NULL)
                    return l1;
    
                ListNode* p1 = l1;
                ListNode* p2 = l2;
                ListNode dummy(-1);
                ListNode* pNew = &dummy;
                int carry = 0;
                int sum = 0;
    
                while(p1 && p2)
                {
                    sum = (p1->val + p2->val + carry)%10;
                    carry= (p1->val + p2->val + carry)/10;
                    pNew->next = new ListNode(sum);
                    pNew = pNew->next;
                    p1 = p1->next;
                    p2 = p2->next;
                }
    
                while(p1)
                {
                    sum = (p1->val +  carry)%10;
                    carry= (p1->val + carry)/10;
                    pNew->next = new ListNode(sum);
                    pNew = pNew->next;
                    p1 = p1->next;
                }
    
                while(p2)
                {
                    sum = (p2->val +  carry)%10;
                    carry= (p2->val + carry)/10;
                    pNew->next = new ListNode(sum);
                    pNew = pNew->next;
                    p2 = p2->next;
                }
    
                if(carry)
                {
                    pNew->next = new ListNode(carry);
                    pNew = pNew->next;
                } 
                
                return dummy.next;
            }
                  
    };
  • 相关阅读:
    vue-cli3安装使用
    document.readyState
    js的堆与栈
    常用方法
    js常见排序算法
    微信小程序swiper高度问题
    微信小程序滑动菜单
    数据筛选和排序------的解析
    使用Windows实现数据绑定----------的解析
    实现Windoes程序的数据更新------的详细解析
  • 原文地址:https://www.cnblogs.com/diegodu/p/4246326.html
Copyright © 2020-2023  润新知