码迷,mamicode.com
首页 > 其他好文 > 详细

链表相关题目总结

时间:2019-08-29 12:04:51      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:while   code   amp   class   img   solution   图片   依次   lis   


 

一、两数相加:

  技术图片

  由于是刷的第一题,先写下:

  本题是两个链表相加,方法是生成一个新的链表(其实是一个节点不断指向下一个节点,这样依次连起来的)去存储这个两个的和。

  首先生成一个新的链表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 };

 


 

  

 

链表相关题目总结

标签:while   code   amp   class   img   solution   图片   依次   lis   

原文地址:https://www.cnblogs.com/ccpang/p/11428380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!