一、两数相加:
由于是刷的第一题,先写下:
本题是两个链表相加,方法是生成一个新的链表(其实是一个节点不断指向下一个节点,这样依次连起来的)去存储这个两个的和。
首先生成一个新的链表h,h是头指针;然后再让指针t指向h。
新建私有方法,该方法的作用是返回链表的有效数据,并让链表指向后继节点。即p好p->next指向相同的地址。
然后建立一个进位标志carry,让sum = x + y + carry:,将sum %10作为新节点node的初始值。让node和*t指向相同的地址,记住*t是t解引用,t指向的值是h,所以就是h和node指向相同的地址。
然后让t指向node->next的地址。
1 class Solution { 2 3 public: 4 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { 5 ListNode* h = NULL,**t = &h; //t指向h,h指向NULL 6 int x = 0,y = 0,carry = 0,sum = 0; 7 while(l1 != NULL || l2 != NULL){ 8 x = getValueAndMoveNext(l1); 9 y = getValueAndMoveNext(l2); 10 sum = x + y + carry; 11 ListNode* node = new ListNode(sum%10); 12 *t = node; //h和node指向同一个地址 13 t = &node->next; //node->next是一个指针,它取指针的地址给t 14 carry = sum /10; 15 } 16 if(carry > 0){ 17 ListNode* node = new ListNode(carry % 10); 18 *t = node; 19 } 20 return h; 21 } 22 private: 23 int getValueAndMoveNext(ListNode* &l){ //l是一个ListNOde指针的引用 24 int v = 0; 25 if(l != NULL){ 26 v = l->val; 27 l = l->next; 28 } 29 30 return v; 31 } 32 33 };