跳到主要内容

简述Java两个有序链表的公共值 ?

参考答案:

在Java中,要找出两个有序链表的公共值,我们需要遍历这两个链表,并比较它们的节点值。有序链表意味着链表中的元素是按照某种顺序(例如,从小到大或从大到小)排列的。这里是一个简单的算法描述:

  1. 定义两个指针:分别指向两个链表的头节点。

  2. 遍历两个链表

    • 如果两个链表都不为空,比较当前指针所指向的节点值。
    • 如果值相等,那么这个值就是两个链表的公共值。
    • 如果一个链表的值小于另一个链表的值,移动较小值链表的指针。
    • 如果一个链表为空,而另一个链表不为空,那么遍历结束。
  3. 输出结果:将所有找到的公共值存储在一个列表或其他数据结构中,并返回这个列表。

下面是一个简单的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方法来找出它们的公共值。