Add Two Numbers
来源:互联网 发布:手机网络初始化失败 编辑:程序博客网 时间:2024/06/06 02:32
经典的单链表问题,涉及到的内容是单链表的遍立和添加
首先需要声明一点,题目中的两个链表长度并不一定相等。想到的方法是通过第三方给ListNode赋值,用局部变量记录两个链表的和差,代码如下:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
boolean flag = true;
ListNode pNew; ListNode tail = new ListNode(0); ListNode returnNode = tail; int sum,up=0; while(l1 != null || l2 != null){ sum = up; if(l1 != null){ sum += l1.val; l1 = l1.next; } if(l2 != null){ sum += l2.val; l2 = l2.next; } if(flag){ tail.val = sum%10; flag = false; }else { pNew = new ListNode(sum%10); tail.next = pNew; tail = pNew; } up = sum/10; } if(up>0){ pNew = new ListNode(up); tail.next = pNew; } return returnNode;}
花费时间:51ms
很久不用链表了,所以写的时候竟然有些无措,看了一些单链表添加的文章,针对此处有些理解困难:
链表本体是returnNode;链表尾部节点tail;每一个新的节点pNew;
首先新建一个节点pNew,然后将tail的地址指向pNew,再将returnNode的地址指向tail;
之后在建立新的pNew节点,将tail的next指向pNew,此处将tail和pNew连接起来,而returnNode因为指向tail所以不需要重新赋值,这一步的目的是在给returnNode增加节点。
而之后讲尾节点tail重新赋值pNew,是将pNew的当前指向传递给tail,在通过下一次的next指向pNew将tail和pNew连接起来,通过tail和pNew的不断链接,单链表越来愈长,而此时returnNode指向的仍然是最初创建的pNew。
我采用的是尾插法生成链表
r->next=p;//循环内部只是让最后一个结点指针指向连新创建的结点
r=p;//每次让指针r始终跟踪当前链表中的最后一个结点
而头插法需要:
p->next=r->next;//每次让让新结点的指针指向原来结点指针指向的结点
r->next=p;//将原来结点指针指向为新结点
就理解来说头插法更复杂一些。
单链表最大的问题在于不能很方便的遍历,也不能通过position获取某固定节点。遍历只能通过while来进行,而其松散结构更利于从指定位置移除和加入值
找了一个实现思路差不多的C++版本:http://blog.csdn.net/zkj126521/article/details/72674953?locationNum=1&fps=1
用时52ms
目前还没找到新的思路,如果你有请@我,3q
- Add two numbers & Add binary
- LeetCode: Add Two Numbers
- Add Two Numbers
- LeetCode: Add Two Numbers
- [LeetCode]Add Two Numbers
- LeetCode Add Two Numbers
- Leetcode: Add Two Numbers
- Add Two Numbers
- LeetCode : Add Two Numbers
- LeetCode Add Two Numbers
- [LeetCode] Add Two Numbers
- LeetCode4: Add Two Numbers
- Leetcode : Add Two Numbers
- Add Two Numbers
- 【leetcode】Add Two Numbers
- add two numbers
- Add Two Numbers
- Add Two Numbers
- 笔试题1
- laravel框架集成PHPExcel讲解及demo
- spring框架的定时器应用
- Can't create table #sql-2e4_14.frm' (errno: 150)--创建外键时发生的错误
- CentOS 7 创建eclipse快捷方式
- Add Two Numbers
- MyBatis动态sql_trim自定义字符串截取
- 机器学习中的超参数
- MOSFET管开关电路基本知识总结
- 注册系统管理员
- hadoop软件大全下载整理(更新中)
- android进阶-Android Scroll分析
- <c:out value="<b>没有进行转换<b>" escapeXml="false"><c:out>标签中的escapeXML属性
- 6.Python入门之序列