---恢复内容开始---
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.
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 12 ListNode *p1 = l1, *p2 = l2; 13 ListNode *dummyHead = new ListNode(-1); 14 ListNode *cur = dummyHead; 15 int carried = 0; 16 while(p1||p2){ 17 int a = p1 ? p1->val : 0; 18 int b = p2 ? p2->val : 0; 19 cur->next = new ListNode((a+b+carried)%10); 20 carried = (a+b+carried)/10; 21 cur = cur->next; 22 p1 = p1? p1->next : NULL; 23 p2 = p2? p2->next : NULL; 24 } 25 cur->next = carried? new ListNode(1):NULL; 26 ListNode* ret = dummyHead->next; 27 delete dummyHead; 28 return ret; 29 } 30 };
注:如果不用new的话会在重复的地方开辟,造成错误。
指针结构体的访问,直接用->就很方便了
给一个连接:http://c.biancheng.net/view/2033.html
当一个指针变量指向结构体时,我们就称它为结构体指针。C语言结构体指针的定义形式一般为:
下面是一个定义结构体指针的实例:
也可以在定义结构体的同时定义结构体指针:
注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&
,所以给 pstu 赋值只能写作:
struct stu *pstu = &stu1;
而不能写作:
struct stu *pstu = stu1;
还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量:
struct stu *pstu = &stu;
struct stu *pstu = stu;
通过结构体指针可以获取结构体成员,一般形式为:
或者:
第一种写法中,.
的优先级高于*
,(*pointer)
两边的括号不能少。如果去掉括号写作*pointer.memberName
,那么就等效于*(pointer.memberName)
,这样意义就完全不对了。
第二种写法中,->
是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->
在C语言中的唯一用途。
上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。
【示例】结构体指针的使用。
运行结果:
Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!
Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!
【示例】结构体数组指针的使用。
运行结果:
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 分以下的人数。
运行结果:
sum=707.50
average=141.50
num_140=2
---恢复内容结束---
---恢复内容结束---
Leetcode 2. Add Two Numbers(指针和new的使用)结构体指针
原文:https://www.cnblogs.com/shanyr/p/11399918.html