两个链表的第一个公共节点
2014-07-25 09:35
309 查看
//此题可以使用栈解决,但空间复杂度需要考虑。。。
//也可根据两个链表长度之差解决~~
#include<iostream> using namespace std; typedef struct Node { int data; Node *next; }lnode,*list; list listinit() { list L; L=(lnode*)malloc(sizeof(list)); if(L==NULL) cout<<"没有足够的内存空间!"<<endl; L->next=NULL; return L; } list listcreateTail()//Tail { int i,len,data; list L,p,r; L=(lnode*)malloc(sizeof(list)); L->next=NULL; r=L; cout<<"input the length of this list:"<<endl; cin>>len; cout<<"input the data of this list:"<<endl; // cin>>data; for(i=0;i<len;i++) { cin>>data; p=(lnode*)malloc(sizeof(list)); p->data=data; r->next=p; r=p; } r->next=NULL; return L; } list reverse(list L) { list p,q; p=L->next; L->next=NULL; while(p) { q=p->next; p->next=L->next; L->next=p; p=q; } return L; } int CommonNode(list L1,list L2) { L1=reverse(L1); L2=reverse(L2); if(L1==NULL || L2==NULL) return ; int temp; list p,q; p=L1->next; q=L2->next; while(p->data==q->data) { temp=p->data; p=p->next; q=q->next; } return temp; } void output(list L) { list p; p=L->next; while(p) { cout<<p->data<<" "; p=p->next; } } int main() { list L,Lr,L1,L2; int k; L1=listcreateTail(); output(L1); cout<<endl; L2=listcreateTail(); output(L2); cout<<endl; cout<<CommonNode(L1,L2); system("pause"); return 0; }
相关文章推荐
- Java找出两个链表的第一个公共节点
- 剑指offer之两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 两个链表的第一个公共节点(Java实现)
- 两个链表的第一个公共节点
- 剑指offer37_两个链表的第一个公共节点
- 剑指offer-第五章优化时间和空间效率(两个链表的第一个公共节点)
- 输入两个链表,找出他们的第一个公共节点
- 两个链表相交以及第一个公共节点的问题
- 两个链表的第一个公共节点
- 面试题 37 两个链表的第一个公共节点
- 剑指offer-两个链表的第一个公共节点
- 剑指offer 两个链表的第一个公共节点
- 输入两个链表,找出它们的第一个公共节点(值)
- 剑指off-求两个链表的第一个公共节点
- (LeetCode)两个链表的第一个公共节点
- 第六十二题(求两个单向链表的第一个公共节点)
- 剑指offer系列之35:两个链表的第一个公共节点