九度 题目1505:两个链表的第一个公共结点
2014-05-25 11:53
369 查看
题目来源:http://ac.jobdu.com/problem.php?pid=1505
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:595
解决:175
题目描述:
输入两个链表,找出它们的第一个公共结点。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表的元素的个数。
接下来的两行,第一行为第一个链表的所有元素,中间用空格隔开。第二行为第二个链表的所有元素,中间用空格隔开。
输出:
对应每个测试案例,
输出两个链表的第一个公共结点的值。
如果两个链表没有公共结点,则输出“My God”。
样例输入:
样例输出:
这个题有问题,交代不明,也许问面试官之后才能做恰当的选择,就单单这个题的话,两个链表尾部并齐,以最短的链表的头结点开始匹配,否则会wa!
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:595
解决:175
题目描述:
输入两个链表,找出它们的第一个公共结点。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表的元素的个数。
接下来的两行,第一行为第一个链表的所有元素,中间用空格隔开。第二行为第二个链表的所有元素,中间用空格隔开。
输出:
对应每个测试案例,
输出两个链表的第一个公共结点的值。
如果两个链表没有公共结点,则输出“My God”。
样例输入:
5 4 1 2 3 6 7 4 5 6 7 3 3 1 5 7 2 4 7 2 3 1 3 4 5 6
样例输出:
6 7 My God
这个题有问题,交代不明,也许问面试官之后才能做恰当的选择,就单单这个题的话,两个链表尾部并齐,以最短的链表的头结点开始匹配,否则会wa!
#include <iostream> #include <cstdio> #include <cstring> using namespace std; struct LinkNode { int iData; LinkNode* pNext; LinkNode() { iData = 0; pNext = NULL; } }; int GetLinkListLength(LinkNode* pHead) { LinkNode* pNode = pHead; int Len = 0; while(pNode != NULL) { ++Len; pNode = pNode->pNext; } return Len; } void GetFirstCommonNode(LinkNode* pHead1, LinkNode* pHead2) { int iLen1 = GetLinkListLength(pHead1); int iLen2 = GetLinkListLength(pHead2); int iDis = iLen1 - iLen2; LinkNode* pLongLinkHead = pHead1; LinkNode* pShortLinkHead = pHead2; if(iLen1 < iLen2) { pLongLinkHead = pHead2; pShortLinkHead = pHead1; iDis = iLen2 - iLen1; } for(int i = 0; i < iDis; ++i) pLongLinkHead = pLongLinkHead->pNext; while(pLongLinkHead != NULL && pShortLinkHead != NULL && pLongLinkHead->iData != pShortLinkHead->iData) { pLongLinkHead = pLongLinkHead->pNext; pShortLinkHead = pShortLinkHead->pNext; } if(pLongLinkHead != NULL && pShortLinkHead != NULL) { printf("%d\n", pLongLinkHead->iData); } else printf("My God\n"); } void Delete_LinkList(LinkNode* pHead) { LinkNode* p1 = pHead; LinkNode* p2 = NULL; while(p1 != NULL) { p2 = p1->pNext; delete p1; p1 = p2; } } int main() { LinkNode* pHead1; LinkNode* pHead2; int n, m, iElem, i; while(~scanf("%d %d", &n, &m)) { if(n < 1 || m < 1) { printf("My God\n"); continue ; } pHead1 = new LinkNode(); scanf("%d", &iElem); pHead1->iData = iElem; LinkNode* p1 = pHead1; LinkNode* pNode = NULL; for(i = 1; i < n; ++i) { scanf("%d", &iElem); pNode = new LinkNode(); pNode->iData = iElem; p1->pNext = pNode; p1 = pNode; } scanf("%d", &iElem); pHead2 = new LinkNode(); pHead2->iData = iElem; LinkNode* p2 = pHead2; pNode = NULL; for(i = 1; i < m; ++i) { pNode = new LinkNode(); scanf("%d", &iElem); pNode->iData = iElem; p2->pNext = pNode; p2 = pNode; } if(pHead1->iData == pHead2->iData) printf("%d\n", pHead1->iData); else GetFirstCommonNode(pHead1, pHead2); Delete_LinkList(pHead1); Delete_LinkList(pHead2); } return 0; }
相关文章推荐
- 【九度】题目1505:两个链表的第一个公共结点
- 题目1505:两个链表的第一个公共结点-九度
- 九度题目1505:两个链表的第一个公共结点
- 九度题目1505:两个链表的第一个公共结点
- 【九度OJ1505】|【剑指offer37】两个链表的第一个公共结点
- 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ
- 剑指Offer - 九度1505 - 两个链表的第一个公共结点
- 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ
- 九度OJ-题目1505:两个链表的第一个公共结点
- 剑指offer- 题目1505:两个链表的第一个公共结点 (2014.1.1)
- 题目1505:两个链表的第一个公共结点
- 算法题目---两个链表的第一个公共结点
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
- 题目:输入两个链表,找出它们的第一个公共结点
- 两个链表的第一个公共结点
- 剑指offer—两个链表的第一个公共结点
- 输入两个链表,找出它们的第一个公共结点。
- 两个链表的第一个公共结点
- 两个链表的第一个公共结点