📅  最后修改于: 2023-12-03 14:43:03.988000             🧑  作者: Mango
当你需要查找链表的最后N个节点的总和时,你可以使用Java编写一个简单的程序来实现这个目标。下面我们就来详细介绍这个方法。
首先,我们需要创建一个链表数据结构。链表结构中包含节点数值和指向下一个节点的指针。我们可以定义一个节点类来表示一个节点的结构。
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
然后,在创建链表时,我们需要定义一个头节点来作为链表的起点。我们可以定义一个LinkedList类来表示完整的链表结构。
public class LinkedList {
ListNode head;
public void addNode(int val) {
ListNode newNode = new ListNode(val);
if (head == null) {
head = newNode;
} else {
ListNode current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
}
在addNode方法中,我们检查链表是否已经存在,如果没有,则将新节点添加到链表的头部,否则迭代整个链表,找到链表的最后一个节点并将新节点添加到其后。
接下来,我们需要编写一个方法来查找链表的最后N个节点的总和。我们可以先遍历整个链表,找到链表的长度。然后,假设链表长度为len,则最后N个节点的开始位置为len - N + 1。最后,遍历链表中从开始位置到结尾的节点数值之和即可。
public int sumLastN(int n) {
int len = 0;
ListNode current = head;
while (current != null) {
len++;
current = current.next;
}
if (n > len) {
throw new IllegalArgumentException("n is larger than linked list length");
}
int start = len - n + 1;
int sum = 0;
current = head;
while (start > 1) {
current = current.next;
start--;
}
while (current != null) {
sum += current.val;
current = current.next;
}
return sum;
}
在方法中,我们首先计算链表的长度。如果N大于链表长度,我们将抛出一个异常。然后,我们计算链表中最后N个节点的开始索引。最后,我们遍历从开始索引到链表结尾的节点,并将节点值相加。
最后,这是我们的完整代码:
public class LinkedList {
ListNode head;
public void addNode(int val) {
ListNode newNode = new ListNode(val);
if (head == null) {
head = newNode;
} else {
ListNode current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
public int sumLastN(int n) {
int len = 0;
ListNode current = head;
while (current != null) {
len++;
current = current.next;
}
if (n > len) {
throw new IllegalArgumentException("n is larger than linked list length");
}
int start = len - n + 1;
int sum = 0;
current = head;
while (start > 1) {
current = current.next;
start--;
}
while (current != null) {
sum += current.val;
current = current.next;
}
return sum;
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addNode(1);
list.addNode(2);
list.addNode(3);
System.out.println(list.sumLastN(2)); // 输出5
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
以上就是使用Java程序查找给定链表的最后N个节点的总和的方法。