网站顶部菜单下拉固定,档案网站建设思考,做免费网站,上海优秀设计公司原题如下#xff1a; 这道题目是一道链表题#xff0c;我们对于这种链表类#xff0c;很显然我们最后输出的是初始节点#xff0c;所以我们要保留我们的初始头指针#xff0c;那么我们的第一步一定是把头指针保留一份#xff0c;然后再让头指针往后进行操作。那么我们进行…原题如下 这道题目是一道链表题我们对于这种链表类很显然我们最后输出的是初始节点所以我们要保留我们的初始头指针那么我们的第一步一定是把头指针保留一份然后再让头指针往后进行操作。那么我们进行什么操作呢很简单就是把l1和l2的对应内容加起来就行了那么我们就面临这样几个问题。
第一加的太“多”了什么叫加多了呢就是我们的和超过9了这样的话显然我们要进行进位我们进位后的那个数等于什么呢显然是等于我们的和取余10那么怎么表示我们后面一个要进位加1呢我们可以再做一个进位指针标记为0时表示没有进位为1时表示已经进位显然我们这里只能是进1。那么我们之后的和其实等于l1l2进位指针的值综合起来我们一开始把进位指针设为0那么我们所有的和都可以为l1l2进位指针的值。
第二加的太“少”了什么意思呢就是当l1和l2为空值的时候我们是拿不到我们的val值的所以这个时候我们人工设为0.
第三l1和l2都为null我们还要进位1这个时候怎么办呢显然我们只需要把我们的答案输出链表末尾加上一个1即可。
以下是代码java实现
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode answerpre new ListNode(0) ;ListNode answer answerpre ;int jinzhi 0 ;while(l1 ! null || l2 ! null){int x l1 null ? 0 : l1.val ;int y l2 null ? 0 : l2.val ;int ans x y jinzhi ;jinzhi ans/10 ;ans ans % 10 ;answer.next new ListNode(ans) ;answer answer.next ;if(l1 ! null){l1 l1.next ;}if(l2 ! null){l2 l2.next ;}}if( jinzhi 1 ){answer.next new ListNode(1) ;answer answer.next ;}return answerpre.next ;}
}