链表中的公共节点
来源:互联网 发布:sai软件官方下载 编辑:程序博客网 时间:2024/06/04 23:09
求取两链表中的第一个公共节点。
由于链表中的节点都有一个指向下一个节点的指针,当某个节点公共时,意味着该公共节点指向的下一个节点也公共,即第一个公共节点后的所有节点公共。因此,两条链表按公共节点重叠后呈现Y型。
我们可以先计算两条链表的长度差,该长度差就是长链表优先要走的步数,之后两链表就一个一个对应比较,直到找到第一个公共节点为止。
具体代码如下:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>#include<string>#include<math.h>#include<algorithm>using namespace std;struct LinkNode{int m_key;struct LinkNode *next;};unsigned int GetListLength(LinkNode* pHead){LinkNode *p;p = pHead;int i = 0;if (pHead){while (p){i++;p = p->next;}return i;}}LinkNode* FindFirstCommonNode(LinkNode *pHead1, LinkNode *pHead2){ int lendifference = abs(int(GetListLength(pHead1)-GetListLength(pHead2)));LinkNode *p1, *p2;p1 = pHead1;p2 = pHead2;for (int i = 1; i <= lendifference; i++){if (GetListLength(pHead1) > GetListLength(pHead2)){p1 = p1->next;}else{p2 = p2->next;}}for (int i = 1; i <= min(GetListLength(pHead1), GetListLength(pHead2));i++){if (p1->m_key == p2->m_key)return p1;p1 = p1->next;p2 = p2->next;}return NULL;}LinkNode* createLink(int *a, int n){LinkNode *p=NULL;LinkNode* head = NULL;for (int i = 0; i < n; i++){LinkNode *newnode = (LinkNode*)malloc(sizeof(LinkNode));if (!newnode){cout <<"node create fail" << endl;return NULL;}newnode->m_key = a[i];newnode->next = NULL;if (!head){head = newnode;p = head;}else{p->next = newnode;p = p->next;}//cout << i <<p->m_key<< endl;}return head;}int _tmain(int argc, _TCHAR* argv[]){LinkNode *head1,*head2;int a[5] = { 1, 2, 3, 6, 7 };int b[] = { 4, 5};head1=createLink(a, 5);head2 = createLink(b, 2);LinkNode *p1 = head1;LinkNode *p2 = head2;//int len = GetListLength(head);while (p2->next){//cout << p2->m_key << endl;p2 = p2->next;}while (p1->m_key!=6){//cout << p1->m_key << endl;p1 = p1->next;}//cout <<len << endl;p2->next = p1;p1=FindFirstCommonNode(head1, head2);cout << p1->m_key <<endl;system("pause");return 0;}
0 0
- 链表中的公共节点
- 两个链表中的第一个公共节点
- 两个链表中的第一个公共节点
- 剑指offer39:两个链表中的第一个公共节点
- 寻找链表公共节点
- 两个链表的公共第一个公共节点
- 找两个链表的公共节点
- 4-13:链表的公共节点
- 链表的第一个公共节点
- [剑指offer]两个链表公共节点
- 求相交链表的公共节点
- 链表的第一个公共节点
- offer37--两个链表的公共节点
- [剑指offer]面试题37.两个链表中的第一个公共节点
- 判断两个链表是否有公共节点并返回第一个公共节点
- 判断两个链表是否有公共节点并返回第一个公共节点
- [LeetCode] 判断两个链表是否有公共节点并返回第一个公共节点
- [LeetCode] 判断两个链表是否有公共节点并返回第一个公共节点
- POJ1328 贪心
- AngularJS服务(Factory/Provider/Service)
- java excel 导出
- 笔记整理-px和dp,px和sp之间的转换
- CodeForces AIM Tech Round 3 (Div. 2) D
- 链表中的公共节点
- C++ 类相关
- Kali Linux简介
- Ubuntu Apache2绑定多个域名
- JAVA面试中问及HIBERNATE与 MYBATIS的对比
- mvn 命令
- leetcode:search-in-rotated-sorted-array
- 关于消息队列的使用
- system ui powerUI