指针修习指南->Leetcode 2
哈,朕又回来了!!!
兜兜转转还是学了计算机专业~~~
第一篇就从指针开始吧
定义指针
int *val; int* val;
//数据类型 *指针名称
//emmm *号位置不同
初始化指针
用&取址
int *val=0; int *val=NULL; //此处的0即为NULL,而非数值 //保证指针指向合法位置,否则很可能对计算机造成不可逆损害 int *val=&value;
指针与数组
//数组名可以直接当做一种指针来使用
取值操作 //*数组名(+下标值) *a(+1)->a[1]; //*(&数组名[下标值]) *(&a[1])->a[1] //获取一维数组地址方式 //数据类型 *指针变量=数组名 int *val=a; //数据类型 *指针变量=&数组名[0] int val=&a[0];
多维数组
//设arr[5][3] *(arr+0)//表示数组中第一维维数0的第一个元素的地址,也就是arr[0][0] *(arr+0)//表示数组中第一维维数1的第一个元素的地址,也就是arr[1][0] 以此类推 如果想要获取arr[1][1]的内存地址,应该使用*(arr+1)+1 //*运算符的优先级高于+运算符 //因此如果想要获取arr[1][2]的值 *((arr+1)+2);
Leetcode 2
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode l3; ListNode *p1=l1; ListNode *p2=l2; ListNode *p3=new ListNode(-1);//开一个链表地址 ListNode *p4=p3; //记录指针3位置 int len1=1,len2=1; while(p1->next!=NULL) { len1++; p1=p1->next; }//记录l1的长度 while(p2->next!=NULL) { len2++; p2=p2->next; }//记录l2的长度 //将长度不够的数组补0 if(len2<len1) { for(;len2<len1;len2++) { p2->next=new ListNode(0);//新开地址 p2=p2->next;//指向下一位 } } else if(len1<len2) { for(;len1<len2;len1++) { p1->next=new ListNode(0); p1=p1->next; } } p1=l1; p2=l2; bool flag=0; int count=0; for(int i=1;i<=len1;i++) { count=p1->val+p2->val+flag;//计算个位累加 if(count>9) { count=count-10; flag=1;//进1处理 } else flag=0; p3->next=new ListNode(count);//新开地址存储 p1=p1->next; p2=p2->next; p3=p3->next; } if(flag) p3->next=new ListNode(1); //谨防数据溢出 return p4->next; } };