如何把向前的链表变成向后的链表
middle的编程用法?
middle的编程用法?
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 - 4 - 3) (5 - 6 - 4)
输出:7 - 0 - 8
原因:342 465 807
思路:
本题是通过链表的方式来实现两个数相加,链表是逆序存储值的,所以可以从前向后依次相加,将相加的值组成一个新的链表返回即可。
要注意的地方:
相加的和为:sumVal l1val l2val carry
存在进位为:carry sumVal / 10
当任意链表遍历到底时,即该链表val值为null时,要将值置为 0
必须当链表的值都为null并且进位为0时,才可以停止循环
新节点的值为 sumVal % 10
代码:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode root new ListNode(0);
ListNode cursor root;
int carry 0;
while(l1 ! null || l2 ! null || carry ! 0) {
int l1Val l1 ! null : 0;
int l2Val l2 ! null : 0;
int sumVal l1Val l2Val carry;
carry sumVal / 10;
ListNode sumNode new ListNode(sumVal % 10);
sumNode;
cursor sumNode;
if(l1 ! null) l1 ;
if(l2 ! null) l2 ;
}
return ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
复杂度分析:
时间复杂度:O(max(m,n)) ,m和n分别为l1和l2元素的个数,最多遍历次数为l1和l2最长的长度。
空间复杂度:O(max(m,n)) 1 ,因为存在进位,所以root链表的值最长会比l1和l2最长长度多1
自学C语言的最大难题是什么?
万事开头难,自学C语言最大的困难在于遇到问题不知道如何解决,还有不知道学到什么程度才能找到工作,这是自学编程语言最大的障碍,学到中间不知道什么时候是个头,遇到问题没有解决的途径,这是自学过程中遇到的最大问题,但这种不能归结为自学中遇到的难题,应该准确来讲是学习编程都会遇到的问题,和具体学习什么编程语言并没有太直接的关系,学习任何编程语言都会存在这种疑惑。
从事C语言编程开发已经有十几年,这门编程语言从入门的难易程度看并不是最难的,语法相对比较少,但C语言最大的特别是组合非常灵活多变,好多初学者学完基本的语法,觉得这门编程语言的代码应该都能看懂,曾经在学习初期学完语法之后去图书馆借了本linux内核解析去阅读,在开始阶段还是信心满满,结果看了几十页之后就开始有怀疑人生的感觉,又老老实实还回图书馆了,继续基础知识的学习之中了,C语言的理论掌握了距离真正的实践还是有很大的差距,实践是永远无法取代的过程。
C语言核心语法屈指可数,指针,函数,结构体,以及内存管理再加上常见的数据结构,说起来就是简单几句话的事情,但在实际过程中不断在实际操作中完成一个个编程场景的试验,不断在编程思路中填充编程脉络,就拿网络编程例子来讲,如果用C语言去完成需要对socket编程有所了解,socket编程属于操作系统的知识,编程的过程不仅仅是编程语言语法的问题,还会涉及到用户的使用习惯,以及编程的环境,常见的编程语言还有linux,windows,mac三种,不同的操作系统api的使用习惯也是不相同,编程语言的学习需要对编程环境有一个适应的阶段。
C语言的学习最快的方法就是直接在项目中实战,但是这种机会不是每个人都能涉猎到,参加培训的机构中也会竭尽全力在模拟这个过程,在自学的过程中也会不断的尝试在开源社区中寻找实战的味道,在真正项目实战中不断的总结经验,现在编程入门的门槛已经提升了许多,在十年前C语言学点基本的语法就能找到个工作去参与到实践中去,但现在已经没有那么好的机会了,这也是行业成熟进步的一种标记。
学习编程语言没有什么窍门,就是在实践过程中,不停的折腾摸索,遇到困难也是很正常的事情,保持一颗平常心,用不到两年的时间就能找到这门语言编程的感觉。C语言在嵌入式以及通信领域使用的比较多,安装一个linux系统在里面就可以找到很多实践的机会,很多linux命令底层的实现就是C语言,可以找这方面的资料去学习,在不断的学习过程中培养自己的学习兴趣,如果本身对于编程有兴趣可以继续保持,没有兴趣想办法培养兴趣,希望能帮打你。