题意:寻找两个链表的首个公共结点,输出其地址。
思路:
方法1. 如果LinkList1比LinkList2长,则让LinkList1先偏移(len1-len2)个结点,然后,让两个链表的的工作指针同时开始偏移,一旦遇到结点地址相同且数据域相同则退出。
方法2(更简洁). 首先遍历LinkList1,每访问一个结点,标记该结点为已经访问;然后,遍历LinkList2,一旦遇到当前结点已经被访问过了,就退出。
代码:
(方法1)
#includeconst int N=100000;struct Node{ char data; int next;}LinkList[N];int myStrlen(int head){ int len=0; while(head!=-1){ len++; head=LinkList[head].next; } return len;}int main(){ //freopen("pat.txt","r",stdin); int head1,head2,n; scanf("%d%d%d",&head1,&head2,&n); int curr,next; char data; for(int i=0;i len2){ int cnt=len1-len2; while(cnt--){ p1=LinkList[p1].next; } }else if(len1
(方法2)
#includeconst int N=100000;struct Node{ char data; int next; bool vis;}LinkList[N];int main(){ //freopen("pat.txt","r",stdin); int head1,head2,n; scanf("%d%d%d",&head1,&head2,&n); int curr,next; char data; for(int i=0;i