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

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. 第十届山东省acm省赛补题(2)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4124 L Median Time Limit: 1 Second      ...

  2. python 并发编程 多进程 队列目录

    python 并发编程 多进程 队列 python 并发编程 多进程 生产者消费者模型介绍 python 并发编程 多进程 生产者消费者模型总结 python 并发编程 多进程 JoinableQue ...

  3. [19/06/09-星期日] CSS基础_示例

    一.图片格式&Hack(尽量不要使用) IE6对图片png-24的透明效果不支持,IE6中背景会发灰,可以使用png-8来代替.但是使用png-8代替之后清晰度会有所下降. 使用js来解决该问 ...

  4. CAS单点登录系统--进阶

    2.CAS服务端数据源设置 2.1需求分析 我们现在让用户名密码从我们的优乐选的user表里做验证 2.2配置数据源 (1)修改cas服务端中web-inf下deployerConfigContext ...

  5. 高性能迷你React框架anujs1.1.3发布

    anujs现在只差一个组件(mention)就完全支持阿里的antd UI库了.一共跑通346个测试, 应该是全世界最接近官方React的迷你框架了. 以后的工作就是把React16的一些新特性支持了 ...

  6. golang 状态机

    package main import ( "errors" "fmt" "reflect" ) type State interface ...

  7. 分布式系统中唯一 ID 的生成方法

    在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的 unique ID? 在单机系统中 (例如一个 MySQL 实例), unique ID ...

  8. 表单提交 multipart/form-data 和 x-www-form-urlencoded的区别

    表单提交表单有两种提交方式,POST和GET.通常我们会使用POST方式,一是因为形式上的安全 :二是可以上传文件. 我之前经常忽略掉表单的编码类型,觉得它特别长比较难记,而且不设置也似乎不影响什么. ...

  9. 关于cron4j的使用

    cron4j的主要实体是调度程序.使用it.sauronsoftware.cron4j.scheduler实例,您可以在一年中的固定时间执行任务.调度程序可以每分钟执行一次任务,每五分钟执行一次,星期 ...

  10. 前端div+css

    css基本结构: css的四种引入方式: 1.行内式:是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用. <p style="background- ...