leetcode:两数相加

您所在的位置:网站首页 leetcode第二题两数相加C语言 leetcode:两数相加

leetcode:两数相加

2024-07-13 02:37| 来源: 网络整理| 查看: 265

在这里插入图片描述 在这里插入图片描述 我的代码,下方没写出来 因为存在一长一短链表 所以一个链表结束了,另一个可能还没结束 所以就要进行判断 第一处判断就是判断两个链表只要有一个结束了,那就结束,因为公共部分没了,需要给剩下填充0 第二处判断就是两个都结束了,万一最后一位仍然有进位,还要新建一个节点 链表值相加取余数你懂的,就是进位,存起来,给下一次相加要用 你的思路和leetcode官方一样 但问题是你是直接在l1和l2链表上操作,官方是新建一个新节点,在这个新节点上添加后续的 每算出来一个值添加上去即可,确实很简单 所以啊 遇到链表题,可以新建虚拟节点,再来一个指针负责在哪插入值,可以理解为双指针,这是一种好做法

/** * 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 dunny1 = new ListNode(-1); ListNode dunny2 = new ListNode(-1); dunny1.next = l1; dunny2.next = l2; int num = 0; int sum = 0; int yushu = 0; int flag = 0; while(l1!=null || l2!=null){ while(l1 != null && l2 != null){ num = l1.val+l2.val+yushu; if(num>9){ yushu = 1; } sum = num % 10; l1.val = sum; l2.val = sum; l1 = l1.next; l2 = l2.next; } //l1和l2有一个为null num = 0; sum = 0; if(l1==null){ flag = 2; while(l2!=null){ num = l2.val + yushu; if(num>9){ yushu = 1; } sum = num % 10; l2.val = sum; l2 = l2.next; } }else if(l2==null){ flag = 1; while(l1!=null){ num = l1.val + yushu; if(num>9){ yushu = 1; } sum = num % 10; l1.val = sum; l1 = l1.next; } } } //l2和l1取完了,还要判断最后一位是否有进制,有的话还得新建一个节点 if(yushu!=0){ if (flag==1){ }else{ } ListNode node = new ListNode(1); l1.next = node; } } }

官方题解 head永远指向开头,tail是负责往哪插入的 还是双指针思维 carry是进位

class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = null, tail = null; int carry = 0; while (l1 != null || l2 != null) { int n1 = l1 != null ? l1.val : 0; int n2 = l2 != null ? l2.val : 0; int sum = n1 + n2 + carry; if (head == null) { head = tail = new ListNode(sum % 10); } else { tail.next = new ListNode(sum % 10); tail = tail.next; } carry = sum / 10; if (l1 != null) { l1 = l1.next; } if (l2 != null) { l2 = l2.next; } } if (carry > 0) { tail.next = new ListNode(carry); } return head; } }

你看官方思路和你一样 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3