---恢复内容开始---

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
 /**
* 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) {
ListNode *p1 = l1, *p2 = l2;
ListNode *dummyHead = new ListNode(-);
ListNode *cur = dummyHead;
int carried = ;
while(p1||p2){
int a = p1 ? p1->val : ;
int b = p2 ? p2->val : ;
cur->next = new ListNode((a+b+carried)%);
carried = (a+b+carried)/;
cur = cur->next;
p1 = p1? p1->next : NULL;
p2 = p2? p2->next : NULL;
}
cur->next = carried? new ListNode():NULL;
ListNode* ret = dummyHead->next;
delete dummyHead;
return ret;
}
};

注:如果不用new的话会在重复的地方开辟,造成错误。

指针结构体的访问,直接用->就很方便了

给一个连接:http://c.biancheng.net/view/2033.html

当一个指针变量指向结构体时,我们就称它为结构体指针C语言结构体指针的定义形式一般为:

struct 结构体名 *变量名;

下面是一个定义结构体指针的实例:

  1. //结构体
  2. struct stu{
  3. char *name; //姓名
  4. int num; //学号
  5. int age; //年龄
  6. char group; //所在小组
  7. float score; //成绩
  8. } stu1 = { "Tom", 12, 18, 'A', 136.5 };
  9. //结构体指针
  10. struct stu *pstu = &stu1;

也可以在定义结构体的同时定义结构体指针:

  1. struct stu{
  2. char *name; //姓名
  3. int num; //学号
  4. int age; //年龄
  5. char group; //所在小组
  6. float score; //成绩
  7. } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;

注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:

struct stu *pstu = &stu1;

而不能写作:

struct stu *pstu = stu1;

还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量:

struct stu *pstu = &stu;
struct stu *pstu = stu;

获取结构体成员

通过结构体指针可以获取结构体成员,一般形式为:

(*pointer).memberName

或者:

pointer->memberName

第一种写法中,.的优先级高于*(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。

第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->C语言中的唯一用途。

上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。

【示例】结构体指针的使用。

  1. #include <stdio.h>
  2. int main(){
  3. struct{
  4. char *name; //姓名
  5. int num; //学号
  6. int age; //年龄
  7. char group; //所在小组
  8. float score; //成绩
  9. } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;
  10. //读取结构体成员的值
  11. printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);
  12. printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);
  13. return 0;
  14. }

运行结果:
Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!
Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!

【示例】结构体数组指针的使用。

  1. #include <stdio.h>
  2. struct stu{
  3. char *name; //姓名
  4. int num; //学号
  5. int age; //年龄
  6. char group; //所在小组
  7. float score; //成绩
  8. }stus[] = {
  9. {"Zhou ping", 5, 18, 'C', 145.0},
  10. {"Zhang ping", 4, 19, 'A', 130.5},
  11. {"Liu fang", 1, 18, 'A', 148.5},
  12. {"Cheng ling", 2, 17, 'F', 139.0},
  13. {"Wang ming", 3, 17, 'B', 144.5}
  14. }, *ps;
  15. int main(){
  16. //求数组长度
  17. int len = sizeof(stus) / sizeof(struct stu);
  18. printf("Name\t\tNum\tAge\tGroup\tScore\t\n");
  19. for(ps=stus; ps<stus+len; ps++){
  20. printf("%s\t%d\t%d\t%c\t%.1f\n", ps->name, ps->num, ps->age, ps->group, ps->score);
  21. }
  22. return 0;
  23. }

运行结果:

Name            Num     Age     Group   Score
Zhou ping 5 18 C 145.0
Zhang ping 4 19 A 130.5
Liu fang 1 18 A 148.5
Cheng ling 2 17 F 139.0
Wang ming 3 17 B 144.5

结构体指针作为函数参数

结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。

【示例】计算全班学生的总成绩、平均成绩和以及 140 分以下的人数。

  1. #include <stdio.h>
  2. struct stu{
  3. char *name; //姓名
  4. int num; //学号
  5. int age; //年龄
  6. char group; //所在小组
  7. float score; //成绩
  8. }stus[] = {
  9. {"Li ping", 5, 18, 'C', 145.0},
  10. {"Zhang ping", 4, 19, 'A', 130.5},
  11. {"He fang", 1, 18, 'A', 148.5},
  12. {"Cheng ling", 2, 17, 'F', 139.0},
  13. {"Wang ming", 3, 17, 'B', 144.5}
  14. };
  15. void average(struct stu *ps, int len);
  16. int main(){
  17. int len = sizeof(stus) / sizeof(struct stu);
  18. average(stus, len);
  19. return 0;
  20. }
  21. void average(struct stu *ps, int len){
  22. int i, num_140 = 0;
  23. float average, sum = 0;
  24. for(i=0; i<len; i++){
  25. sum += (ps + i) -> score;
  26. if((ps + i)->score < 140) num_140++;
  27. }
  28. printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum/5, num_140);
  29. }

运行结果:
sum=707.50
average=141.50
num_140=2

---恢复内容结束---

---恢复内容结束---

Leetcode 2. Add Two Numbers(指针和new的使用)结构体指针的更多相关文章

  1. 结构体与typedef的使用,还有结构体指针的使用(二层结构体指针)

    该类容摘抄自以下链接,为学习之后的记录,不是鄙人原创. 学习链接:https://blog.csdn.net/a2013126370/article/details/78230890 typedef ...

  2. Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指 ...

  3. ctypes 操作 python 与 c++ dll 互传结构体指针

    CMakeLists.txt # project(工程名) project(blog-3123958139-1) # add_library(链接库名称 SHARED 链接库代码) add_libra ...

  4. 深入了解Windows句柄到底是什么(句柄是逻辑指针,或者是指向结构体的指针,图文并茂,非常清楚)good

    总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解. ...

  5. LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters

    LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCod ...

  6. LeetCode:1. Add Two Numbers

    题目: LeetCode:1. Add Two Numbers 描述: Given an array of integers, return indices of the two numbers su ...

  7. [LeetCode] 445. Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  8. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  9. Delphi 中的结构体与结构体指针

    好多程序都给结构体变量设定了一个结构体指针 例如: PAbc = ^TAbc; TAbc = record a: string[10]; b: string[5]; c: string[1]; end ...

随机推荐

  1. numpy添加新的维度

    原文链接:https://blog.csdn.net/xtingjie/article/details/72510834 numpy中包含的newaxis可以给原数组增加一个维度 np.newaxis ...

  2. 7.安装pycharm----导入Nmap模块----netcat反向shell----metasploitable靶机环境

    安装pycharm www.jetbrains.com/pycharm/ tar -zxvf p补全 ls cd p补全 ls cd bin ls ./pycharm.sh 新建项目 pythonRo ...

  3. Linux系统常用命令之top

    top - 06:58:37 up 7 days, 23:36, 2 users, load average: 0.00, 0.01, 0.05Tasks: 716 total, 1 running, ...

  4. swagger @ApiModel添加实体类不生效

    在使用swagger时, 以为加上@ApiModel在实体类上就可以在swagger-ui.html的Models里面显示. 但是我创建了很多实体类, 但怎么也只显示了一个??? Models中无论如 ...

  5. Windows系统里Oracle 11g R2 Client(64bit)的下载与安装

    环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Oracle 11g 是仅 ...

  6. 获取客户机MAC地址 根据IP地址 获取机器的MAC地址 / 获取真实Ip地址

    [DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref ...

  7. [BZOJ 3123] [SDOI 2013]森林(可持久化线段树+并查集+启发式合并)

    [BZOJ 3123] [SDOI 2013]森林(可持久化线段树+启发式合并) 题面 给出一个n个节点m条边的森林,每个节点都有一个权值.有两种操作: Q x y k查询点x到点y路径上所有的权值中 ...

  8. 小白学Python(19): Pyinstaller 生成 exe 文件

    python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块. 安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装 ...

  9. PHP批量导入excell表格到mysql数据库

    PHP批量导入excell表格到mysql数据库,本人通过亲自测试,在这里分享给大家 1,下载 php  excell类库 网上搜索可以下载,这里不写地址 2,建html文件 <form met ...

  10. elementUI 等 UI框架中,@change方法传递参数

      有些业务中,在使用 @change 回调的时候需要动态获取当前循环下的特定值,但是@change方法一旦传递参数就会覆盖原本的数据,对此,有两种方法解决: // 这种方法据说会改变 this 指向 ...