输入两个链表,找出它们的第一个公共结点。
来源:互联网 发布:淘宝卖家开花呗条件 编辑:程序博客网 时间:2024/05/29 10:20
剑指offer:输入两个链表,找出它们的第一个公共结点。
思路:如果两个链表有公共节点,那么它们在第一个公共节点以后的节点都相同。
1)分别求出两个链表的长度length1和length2;
2)求出两个链表长度差dif;
3)让长的链表先从头往后先走dif步
4)连个链表同时走,直到指针相同为止,返回当前指针。
5)如果两链表走到头也地址不相同,则返回NULL
代码如下:
/*struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};*/class Solution {public: unsigned int GetListLength(ListNode* pHead){ unsigned int length = 0; ListNode* pNode = pHead; while(pNode != NULL){ length++; pNode = pNode->next; } return length; } ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pHead1 == NULL || pHead2 == NULL) return NULL; ListNode* p1 = pHead1; ListNode* p2 = pHead2; unsigned int length1 = GetListLength(p1); unsigned int length2 = GetListLength(p2); if(length1 > length2){ while((length1--) > length2){ p1 = p1->next; } } else if(length2 > length1){//注意这里一定是else if,用if会出错,因为前面length1--导致的 while((length2--) > length1){ p2 = p2->next; } } while(p1 != NULL && p2 != NULL){ if(p1 == p2) return p1; else{ p1 = p1->next; p2 = p2->next; } } return NULL; }};
阅读全文
0 0
- 输入两个链表,找出它们的第一个公共结点。
- 【剑指offer】输入两个链表,找出它们的第一个公共结点。
- 输入两个链表,找出它们的第一个公共结点
- 题目:输入两个链表,找出它们的第一个公共结点
- 输入两个链表,找出它们的第一个公共结点
- 28.输入两个链表,找出它们的第一个公共结点。
- 输入两个链表,找出它们的第一个公共结点
- 输入两个链表,找出它们的第一个公共结点。
- 输入两个链表,找出它们的第一个公共结点
- 输入两个链表,找出它们的第一个公共结点。
- 输入两个链表,找出它们的第一个公共结点
- 剑指offer:两个链表的第一个公共结点输入两个链表,找出它们的第一个公共结点。
- 两个单向链表,找出它们的第一个公共结点
- 两个单向链表,找出它们的第一个公共结点
- 两个单向链表,找出它们的第一个公共结点
- 两个单向链表,找出它们的第一个公共结点。
- 两个单向链表,找出它们的第一个公共结点。
- 两个单向链表,找出它们的第一个公共结点
- takephoto图片选择器
- swing入门Helloword
- hpuoj 【1144】n的合成 【数学】&&【思维】
- TypeError:__init__() got an unexpected keyword argument 'xxx'
- 数据结构--串
- 输入两个链表,找出它们的第一个公共结点。
- bootstrap日历控件
- acm Subsequence 3061
- Gradle从入门到实战
- c++学习系列之vector
- MFC之路 串口通信篇(之二)
- 学生信息系统优化总结
- Python学习(二)——控制流
- CSS垂直方向上文本居中