lintcode 交叉链表
来源:互联网 发布:淘宝店铺资金被冻结 编辑:程序博客网 时间:2024/05/17 22:40
问题描述:
请写一个程序,找到两个单链表最开始的交叉节点。
思路:
一:1.通过两个栈将两个链表保存起来
2.如果两个链表相交了那么刚弹出来的节点一定是相同的
3.通过临时变量将刚开始弹出的两个节点保存起来
4.开始遍历两个栈,栈中的元素两个临时变量分别更新。一个保存刚弹出来的节点另一个保存上一个弹出的节点
5.如果一旦发现两个节点不一样。则上一个保存的节点就是交叉节点
假设链表的长度分别是K和N时间复杂度为 O(n) 空间复杂度O(K+N)
二:1.先找到长的那个链表,看长链表比短链表长多少?记录下长度差。
2.先让长链表走长度差的距离,此时再同时开始遍历
3.第一次两个节点相同的时候那个节点就是交叉节点
时间复杂度O(n) 空间复杂度O(1);
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { // write your code here int lenA=1; int lenB=1; ListNode *nodeA=headA; ListNode *nodeB=headB; while(nodeA!=NULL||nodeB!=NULL) { if(nodeA!=NULL) { lenA++; nodeA=nodeA->next; } if(nodeB!=NULL) { lenB++; nodeB=nodeB->next; } } ListNode *nodeLong=lenA>lenB? headA:headB; int cur=lenA>lenB? (lenA-lenB):(lenB-lenA); while(cur--) { nodeLong=nodeLong->next; } ListNode *nodeLess=lenA>lenB? headB:headA; while(nodeLess!=NULL&&nodeLong!=NULL) { if(nodeLong==nodeLess) return nodeLess; else { nodeLess=nodeLess->next; nodeLong=nodeLong->next; } } return NULL;}
阅读全文
0 0
- lintcode 交叉链表
- Lintcode 两个链表的交叉
- LintCode: 两个链表的交叉
- lintcode ----两个链表的交叉
- lintcode-两个链表的交叉
- [LintCode]380.两个链表的交叉
- LintCode:M-两个链表的交叉
- 两个链表的交叉-LintCode
- LintCode-剑指Offer-(380)两个链表的交叉
- lintcode刷题——两个链表的交叉
- [Lintcode]Intersection of Two Linked Lists 两个链表的交叉
- LintCode-交叉字符串
- LintCode(M)交叉字符串
- LintCode 29-交叉字符串
- LintCode 29 交叉字符串
- LintCode 交叉字符串
- lintcode -- 交叉字符串
- LintCode 交叉字符串
- 6:数字统计( 程序设计与算法(一)第四周测验(2017夏季)
- UART通信
- html头部标签meta
- poj 1961 Period
- 【雪野实训记录】Oracle数据库 T5作业——使用 PL/SQL
- lintcode 交叉链表
- sequence 跳号
- 《Deep Learning》学习1——基于特征分解的主成分分析
- Android Webview知识点和遇到过的坑全总结
- Keras深度神经框架
- hdu 多校联赛 Classes
- Git命令 未完结
- Linux 系统实时监控的瑞士军刀 —— Glances
- Oracle中快速删除某个用户下的所有表数据 禁用所有外键