2个链表的第一个公共结点
来源:互联网 发布:贾森威廉姆斯生涯数据 编辑:程序博客网 时间:2024/06/04 18:19
题目:输入2个链表,找出他们的第一个公共结点。
链表定义如下
struct ListNode{ int value; ListNode * next;};
何为公共结点?若2个链表有公共结点,则2个链表从某一结点开始,他们的next都指向同一个结点,由于是单向链表的结点,每个结点只有一个next指针,故从第一个公共结点开始,之后的结点都是重合的,不会再出现分支。
根据之后结点重合的特点可以首先遍历每个链表得到他们的长度,然后让长度长的链表先走两者的差值,这样2个链表之后的长度就会一样;接着再同时在2个链表上遍历,找到的第一个相同结点就是他们的第一个公共结点。
int ListLength(ListNode* head){//获得链表的长度int length = 0;ListNode* node = head;while (node!=NULL){length++;node = node->next;}return length;}//得到第一个共同结点ListNode* FirstCommonNode(ListNode* head1,ListNode* head2){if (head1 == NULL || head2 == NULL)return NULL;ListNode* commenNode = NULL;int length1 = ListLength(head1);int length2 = ListLength(head2);ListNode* longList = NULL;ListNode* shortList = NULL;int longlength = 0;int shortlength = 0;if (length1 >= length2){longList = head1;longlength = length1;shortList = head2;shortlength = length2;}else{longList = head2;longlength = length2;shortList = head1;shortlength = length1;}int sub = longlength - shortlength;//2个链表的差值for (int i = 0; i < sub; i++)//长链表先走差值步数,再同时在2个链表上遍历longList = longList->next;while (longList!=NULL&&shortList!=NULL){if (longList == shortList){commenNode = longList;break;}longList = longList->next;shortList = shortList->next;}return commenNode;}
0 0
- 2个链表的第一个公共结点
- 找出2个链表的第一个公共结点。
- 两链表的第一个公共结点
- 两链表的第一个公共结点
- 两链表的第一个公共结点
- 两链表的第一个公共结点
- 两链表的第一个公共结点
- 两链表的第一个公共结点
- 两链表的第一个公共结点->二叉树两结点的最近共同父结点
- 找出两个链表的第一个公共结点--总结
- 找出两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出链表的第一个公共结点(链表)。
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 用 Eclipse 插件提高JAVA 代码质量
- iOS -- textfield输入时键盘升起,改变view高度
- 常用类-NSMutableDictionary
- 数据结构3_160805无头单向不循环
- 九度OJ 1138 进制转换
- 2个链表的第一个公共结点
- 电话号码验证
- Mysql 5.6.30 insert null (ERROR 1048 (23000): Column 'ctime' cannot be null)
- HDU-2647 Reward 【拓扑模板】
- 每天一个Linux命令----(压缩、解压缩之tar与gzip)
- TensorFlow的分布式学习框架简介
- CSS边框与背景[下]
- TextView长按进行复制或剪切
- PHP书写规范 PHP Coding Standard