leedcode两数相加的个人理解思考
对于单向链表: 因为单向链表是不可逆的,所以需要考虑指针的所在位置,按照一般逻辑一直往后加会导致无法复原,找不到头指针那么得到的链表也就完全找不到了。保留头部指针是非常关键的。 拆分方法从而复用是很好地习惯,不仅让代码整洁,方便debug,而且可以省去很多写重复代码的时间。 通过浅拷贝可以让工具指针实例去遍历主指针的所有内容,非常好用。
解题思路是,首先创建一个初始化的结果指针,然后不动他,在创建一个工具人指针指向结果指针的next,通过对工具人指针的利用,不断拓展结果指针的链条。 对于输入的两个链表l1 ,l2, 需要将他们往后遍历,直到两个指针都为空运算结束。 把l1, l2所在位置的值加起来,需要进一位的先把他暂时放在结果指针的尾部,在下一步操作的时候再一起加起来。 int类型数据是不能为null的,所以说需要额外去判断,如果为空那么值应该是0. 如果其中有一个链表已经到底而另一个没到,那么就不能把他的指针再往后指,否则会报错,可以用判断让他到底后往后移位。 先做所在位数的运算还是先做下一位数的进制很重要,否则会出现9999999+999 运算出现错误。一定要逻辑来。 由于每次只能知道两位数的值,所以遍历的话不能先去考虑链表尾带0的情况。或者可以先遍历两个链表,确定最高位所在下标后有目的地去操作?确实会是个更好的办法。 如果像我一样用笨方法,那么需要写一个反转的方法,我使用的是递归的思想先把链表拆解再从最后往前拼,但是很麻烦,需要用到全局变量不然难以传参。 在反转后再把指针一直移到非0的位。其中需要判断是不是到了只剩下一位的情况,有可能结果是000000,不考虑的话会出现空指针没有next的报错。
做得少,走了很多弯路,算法思路也不够清晰,但是解题过程比较专注冷静,很享受这种感觉,开了一个好头。



