Intersection of Two Linked Lists

来源:互联网 发布:php 打印数组格式 编辑:程序博客网 时间:2024/04/29 13:49

Write a program to find the node at which the intersection of two singly linked lists begins.


For example, the following two linked lists:

A:          a1 → a2                   ↘                     c1 → c2 → c3                   ↗            B:     b1 → b2 → b3

begin to intersect at node c1.


Notes:

  • If the two linked lists have no intersection at all, return null.
  • The linked lists must retain their original structure after the function returns.
  • You may assume there are no cycles anywhere in the entire linked structure.
  • Your code should preferably run in O(n) time and use only O(1) memory.

Credits:
Special thanks to @stellari for adding this problem and creating all test cases.


#include<stdio.h>#include<stdlib.h>typedef struct ListNode {    int val;    struct ListNode *next; }*ListNode;ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {    ListNode *p1,*p2;    int n=0,m=0,d,i;    if(headA==NULL||headB==NULL) return NULL;    if(headA==headB) return headA;    for(p1=headA;p1->next!=NULL;p1=p1->next) n++;    for(p2=headB;p2->next!=NULL;p2=p2->next) m++;    if(p1!=p2) return NULL;    d=(m>=n)?(m-n):(n-m);    if(n>m) {        p1=headA;        p2=headB;    }    else{         p1=headB;        p2=headA;    }    for(i=0;i<n;i++) p1=p1->next;    while(p1!=NULL && p2!=NULL){        if(p1==p2) return p1;        else{            p1=p1->next;            p2=p2->next;        }    }    return p1;}


0 0
原创粉丝点击