C语言判断单链表是否相交

//
// Created by Administrator on 2024/10/29.
//

#ifndef LINK_H
#define LINK_H
/**
 * 链表的结构体
 */
typedef struct Link {
    int element;
    struct Link *next;
} link;
#endif //LINK_H
//
// 判断单链表是否相交
// Created by Administrator on 2024/10/30.
//
#pragma once
#include "Link.h"/*链表结构*/

#ifndef IFCROSSLINK_H
#define IFCROSSLINK_H

typedef enum bool {
    False = 0,
    True = 1,
} bool;

/**
 * 判断单链表是否相交
 * @param a
 * @param b
 * @return
 */
bool ifCrossLink(link *a, link *b);
#endif //IFCROSSLINK_H
//
// Created by Administrator on 2024/10/30.
//
#include "IfCrossLink.h"
/**
 * 判断单链表是否相交
 * @param a
 * @param b
 * @return
 */
bool ifCrossLink(link *a, link *b) {
    link *p1 = a;
    link *p2 = b;
    /*1. 暴力比较*/
    // while (p1) {
    //     while (p2) {
    //         if (p1 == p2) {
    //             return True;
    //         }
    //         p2 = p2->next;
    //     }
    //     p1 = p1->next;
    // }

    /*
     * 2. 优化
     * 单链表相交的场景结构为如下示例
     * 【】->
     *       【】->【】->【】
     * 【】->
     * 那么是不是只需要比较最后一个节点是不是同一个节点,就能判断单链表是否相交呢
     */
    while (p1) {
        p1 = p1->next;
    }
    while (p2) {
        p2 = p2->next;
    }
    if (p1 == p2) return True;
    return False;
}

 

posted @ 2024-10-30 15:25  龍飛鳯舞  阅读(2)  评论(0编辑  收藏  举报