zoukankan      html  css  js  c++  java
  • [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;
            }
                  
    };
  • 相关阅读:
    《Java程序设计》第五周学习总结
    团队建设任务
    《Java程序设计》第四周学习总结
    ML_Review_GMM(Ch10)
    ML_Review_SVM(Ch9)
    ML_Review_LDA(Ch5)
    ML_Review_PCA(Ch4)
    关于Kernel的思考
    ML_Homework_Porject_2_LDA_KNN
    CV_Learn
  • 原文地址:https://www.cnblogs.com/diegodu/p/4246326.html
Copyright © 2011-2022 走看看