简述Java两个有序链表的公共值 ?
参考答案:
在Java中,要找出两个有序链表的公共值,我们需要遍历这两个链表,并比较它们的节点值。有序链表意味着链表中的元素是按照某种顺序(例如,从小到大或从大到小)排列的。这里是一个简单的算法描述:
-
定义两个指针:分别指向两个链表的头节点。
-
遍历两个链表:
- 如果两个链表都不为空,比较当前指针所指向的节点值。
- 如果值相等,那么这个值就是两个链表的公共值。
- 如果一个链表的值小于另一个链表的值,移动较小值链表的指针。
- 如果一个链表为空,而另一个链表不为空,那么遍历结束。
-
输出结果:将所有找到的公共值存储在一个列表或其他数据结构中,并返回这个列表。
下面是一个简单的Java实现示例:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class CommonValues {
public static List<Integer> findCommonValues(ListNode list1, ListNode list2) {
List<Integer> commonValues = new ArrayList<>();
while (list1 != null && list2 != null) {
if (list1.val == list2.val) {
commonValues.add(list1.val);
list1 = list1.next;
list2 = list2.next;
} else if (list1.val < list2.val) {
list1 = list1.next;
} else {
list2 = list2.next;
}
}
return commonValues;
}
public static void main(String[] args) {
// 创建并初始化两个有序链表
ListNode list1 = new ListNode(1);
list1.next = new ListNode(3);
list1.next.next = new ListNode(5);
ListNode list2 = new ListNode(2);
list2.next = new ListNode(3);
list2.next.next = new ListNode(4);
// 找出公共值
List<Integer> common = findCommonValues(list1, list2);
// 输出结果
for (int val : common) {
System.out.println(val);
}
}
}
这个示例代码定义了一个ListNode
类来表示链表节点,以及一个findCommonValues
方法来找出两个有序链表的公共值。在main
方法中,我们创建了两个有序链表并调用findCommonValues
方法来找出它们的公共值。