📌  相关文章
📜  用于查找两个排序链表的交集的 C# 程序(1)

📅  最后修改于: 2023-12-03 15:40:54.203000             🧑  作者: Mango

用于查找两个排序链表的交集的 C# 程序

本程序是用 C# 语言编写的,用于查找两个排序链表的交集。主要使用了链表数据结构和双指针的思路,具有时间复杂度 O(m+n),其中 m 和 n 分别是两个链表的长度。

实现思路

本程序的实现思路分为以下几个步骤:

  1. 定义链表节点结构体 ListNode,包含整型值 val 和指向下一个节点的指针 next。

  2. 定义函数 GetIntersectionNode,参数为两个链表头节点 headA 和 headB,返回值为交集节点的指针或 null。

  3. 定义两个指针 pA 和 pB,分别指向链表头节点 headA 和 headB。

  4. 当指针 pA 或 pB 非空时,判断它们所指的节点值是否相等:

    • 若相等,则返回该节点的指针;
    • 若 pA 的节点值小于 pB,则将 pA 指向下一个节点;
    • 若 pB 的节点值小于 pA,则将 pB 指向下一个节点。
  5. 如果没有找到交集节点,返回空指针 null。

代码实现

以下是完整的 C# 代码实现。代码片段如下:

public class ListNode {
    public int val;
    public ListNode next;
    public ListNode(int x) { val = x; }
}

public class Solution {
    public ListNode GetIntersectionNode(ListNode headA, ListNode headB) {
        ListNode pA = headA, pB = headB;
        while (pA != pB) {
            pA = pA != null ? pA.next : headB;
            pB = pB != null ? pB.next : headA;
        }
        return pA;
    }
}
使用方法

要使用本程序,在 C# 语言的项目中,需要先新建两个排序的链表。例如:

ListNode l1 = new ListNode(1);
l1.next = new ListNode(2);
l1.next.next = new ListNode(4);

ListNode l2 = new ListNode(1);
l2.next = new ListNode(3);
l2.next.next = new ListNode(4);

然后,调用 GetIntersectionNode 函数:

Solution solution = new Solution();
ListNode intersectionNode = solution.GetIntersectionNode(l1, l2);
总结

本程序使用了链表数据结构和双指针的思路,实现了查找两个排序链表的交集功能,时间复杂度达到了 O(m+n) 的级别。这种方法在实际应用中具有较高的效率和可用性,是一种十分实用的算法思路。