看了一些关于链表的文章和视频,但都是讲链表的好处和怎么运转的。但代码部分没提,我就很懵b。
代码方法是我从LC上copy来的,但跑不起来,都是报错。
为什么public会有ListNode?这是关键字吗?搜了百度并不是,为什么这个能夹在方法和public中间?
ListNode方法调用时该传递数组类型实参吗?
能不能给个正确的样子怎么在main方法用syso打印输出跑起官方给的方法。
方法来源:leetcode中等两数之和官方java答案。
少了一个 ListNode 类,把它放到 DemoMedium1 的同一个包中。
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
// 添加新的结点
public void add(int newval) {
ListNode newNode = new ListNode(newval);
if (this.next == null)
this.next = newNode;
else
this.next.add(newval);
}
// 打印链表
public void print() {
System.out.print(this.val);
if (this.next != null) {
System.out.print("-->");
this.next.print();
} else {
System.out.println();
}
}
}
测试如下:
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
listNode1.add(2);
listNode1.add(3);
ListNode listNode2 = new ListNode(2);
listNode2.add(3);
listNode2.add(5);
System.out.println(addTwoNumbers(listNode1, listNode2).val);
}
完整代码或者链接贴出来
可以参考这篇文章,希望对你有帮助:https://blog.csdn.net/weixin_42460407/article/details/114047336
public class demoMedium1 {
public static void main(String[] args) {
int[] nums = new int[] { 1,2 ,3 };
int[] nums2 = new int[] { 2,3 ,5 };
System.out.println(addTwoNumbers(nums,nums2));
}
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;
}
}
一共两个类,放在同一个包中就行:
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
// 添加新的结点
public void add(int newval) {
ListNode newNode = new ListNode(newval);
if (this.next == null)
this.next = newNode;
else
this.next.add(newval);
}
// 打印链表
public void print() {
System.out.print(this.val);
if (this.next != null) {
System.out.print("-->");
this.next.print();
} else {
System.out.println();
}
}
}
public class demoMedium1 {
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
listNode1.add(2);
listNode1.add(3);
ListNode listNode2 = new ListNode(2);
listNode2.add(3);
listNode2.add(5);
addTwoNumbers(listNode1, listNode2).print();
}
public static 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;
}
}
少了一个 ListNode 类,把它放到 DemoMedium1 的同一个包中。
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
// 添加新的结点
public void add(int newval) {
ListNode newNode = new ListNode(newval);
if (this.next == null)
this.next = newNode;
else
this.next.add(newval);
}
// 打印链表
public void print() {
System.out.print(this.val);
if (this.next != null) {
System.out.print("-->");
this.next.print();
} else {
System.out.println();
}
}
}
测试如下:
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
listNode1.add(2);
listNode1.add(3);
ListNode listNode2 = new ListNode(2);
listNode2.add(3);
listNode2.add(5);
addTwoNumbers(listNode1, listNode2).print();
}