博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]判断两个链表是否有公共节点并返回第一个公共节点
阅读量:5997 次
发布时间:2019-06-20

本文共 2277 字,大约阅读时间需要 7 分钟。

转自:

 

判断两个链表是否有公共节点的方法最简单的就是遍历到每个链表的最后一个节点,看他们是否是同一个节点:如果是同一个节点的话,那么两个链表肯定有公共节点:

解释:因为链表是线性结构,不想树那样的非线性分叉结构

typedef struct LNode{      int data;      struct LNode *next;  }LNode, *LinkList;

一个链表有唯一的一个后序节点:如果两个链表中出现了公共节点,那么从该点开始,后面的节点都是公共的,肯定链表的最后一个节点也是公共的。于是不管三七二十一,遍历到最后链表的一个节点,判断两个节点是不是同一个节点就可以了。

但是这里我们要返回第一个公共节点,所以还得寻去他法:

1.如果两个链表有长度一样,我们从第一个逐个遍历节点,再比较是不是同一个节点就可以了;

2.如果两个链表长度不一样,我们应该先让长的链表从表头“走” len1 - len2步(len1为list1的长度,len2为list2的长度),然后按照1中方法进行操作即可。

# include 
# include
typedef struct LNode{ int data; struct LNode *next; }LNode, *LinkList; /** * 采用数组a[]来初始化链表,数组的长度为length;head指向了头节点。 */ LinkList CreatList(int a[], int length) { LinkList head = (LinkList)malloc(sizeof(LNode)); head->next = NULL; int index; LinkList temp; for (index = 0; index < length; index ++) { temp = (LinkList)malloc(sizeof(LNode)); temp->data = a[index]; temp->next = head->next; head->next = temp; } return head; } /** * 判断链表list1与链表list2是否相交,如果相交的话,就返回第一个相交点 * 注意相交的话,就是横着的Y字型 */ int isIntersect(LinkList list1, LinkList list2) { LinkList ptr1 = list1->next; LinkList ptr2 = list2->next; int len1 = getLength(list1); int len2 = getLength(list2); int step = len1 - len2; int index; if(step > 0) //list1长,那么list1先走step; { for (index = 0; index < step; index ++) ptr1 = ptr1->next; } else //list2长,那么list2先走step; { for (index = 0; index < -1 * step; index ++) ptr2 = ptr2->next; } while (ptr1 != NULL) { if (ptr1 == ptr2) { printf("the first intersection node is %d/n", ptr1->data); return 1; } ptr1 = ptr1->next; ptr2 = ptr2->next; } printf("there is no insection node between the two list"); return 0; } int main() { int a4[] = {
1,2,3,4,5}; LinkList list = CreatList(a4,5); LinkList current = list->next; while (current->next) { current = current->next; } current->next = list->next->next; //公共点为4 int result1 = isLoop(list); getLoopNode(list); }

 

 

转载地址:http://hmmlx.baihongyu.com/

你可能感兴趣的文章
登陆功能
查看>>
ES6-Promise
查看>>
DevExpress中ChartControl柱状图(Bar)用法
查看>>
POJ2485 Highways(最小生成树)
查看>>
BZOJ3223 文艺平衡树
查看>>
table的构成
查看>>
手机端点击取消高亮
查看>>
WordPress 迁移后只有首页可用,其他页面都报404
查看>>
SEO工作者人去和分析核心关键词?
查看>>
Tomcat源码分析(一)
查看>>
纯数学教程 Page 325 例LXVIII (10) Math.Trip.1935,1936
查看>>
$\mathbf{R}$上的离散点集是至多可数集
查看>>
9月14日学习内容整理:初识别面向对象
查看>>
[2018.12.13]BZOJ1407 [Noi2002]Savage
查看>>
Oracle 函数 Translate 的用法
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
.NET Core2使用Azure云上的Iot-Hub服务
查看>>
Models of good programmer
查看>>
使用swoole编写简单的echo服务器
查看>>
信息系统管理师读书笔记之第5章 面向对象方法
查看>>