码迷,mamicode.com
首页 > 其他好文 > 详细

【编程题目】编程判断俩个链表是否相交

时间:2014-08-10 12:45:20      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   art   ar   问题   

第 7 题(链表)
微软亚院之编程判断俩个链表是否相交
给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交。
为了简化问题,我们假设俩个链表均不带环。
问题扩展:
1.如果链表可能有环列?
2.如果需要求出俩个链表相交的第一个节点列?

 

看到这个题目我很困惑。如果链表的结构是下面这个样子

typedef struct ListNode
{
    int m_Value;
    ListNode * p_Next;
}ListNode;

那么一旦有相交,链表的后端就都是一模一样的了啊?因为交叉点只可能有一个p_Next,那只要判断两个链表最后一个不为空的结点是否相同就可以了。

对有环列的,那环只能出现在链表最后面了。扩展的第1、2问只要对两个链表做两层循环判断就可以了。

但总觉得我理解的不对。对于带环链表的创建我也有点困惑。

/*
第 7 题(链表)
微软亚院之编程判断俩个链表是否相交
给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交。
为了简化问题,我们假设俩个链表均不带环。
问题扩展:
1.如果链表可能有环列?
2.如果需要求出俩个链表相交的第一个节点列?
start time = 11:10
end time = 
*/

#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode
{
    int m_Value;
    ListNode * p_Next;
}ListNode;

void addNode(ListNode * &pHead, ListNode * newNode)
{
    if(pHead == NULL)
    {
        pHead = (ListNode *)malloc(sizeof(ListNode));
        pHead->m_Value = newNode->m_Value;
        pHead->p_Next = newNode->p_Next;
    }
    else
    {
        ListNode * x = pHead;
        while(x->p_Next != NULL)
        {
            x = x->p_Next;
        }
        x->p_Next = (ListNode *)malloc(sizeof(ListNode));
        x->p_Next->m_Value = newNode->m_Value;
        x->p_Next->p_Next = newNode->p_Next;
    }
}

bool isCross(ListNode * p1, ListNode * p2)
{
    ListNode * x = p1;
    ListNode * y = p2;
    while(x != NULL)
    {
        while(y != NULL)
        {
            if(x == y)
            {
                return true;
            }
            y = y->p_Next;
        }
        x = x->p_Next;
    }
}

int main()
{
    ListNode n1 , n2, n3, n4, n5, n6, n7, n8, n9;
    n1.m_Value = 1; n1.p_Next = &n2;
    n2.m_Value = 2; n2.p_Next = &n3;
    n3.m_Value = 3; n3.p_Next = &n7;
    n4.m_Value = 4; n4.p_Next = &n5;
    n5.m_Value = 5; n5.p_Next = &n6;
    n6.m_Value = 6; n6.p_Next = &n7;
    n7.m_Value = 7; n7.p_Next = &n8;
    n8.m_Value = 8; n8.p_Next = &n9;
    n9.m_Value = 9; n9.p_Next = NULL;

    bool flag = isCross(&n1, &n4);
    return 0;
}

 

【编程题目】编程判断俩个链表是否相交,布布扣,bubuko.com

【编程题目】编程判断俩个链表是否相交

标签:style   blog   color   os   io   art   ar   问题   

原文地址:http://www.cnblogs.com/dplearning/p/3902595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!