练手代码。(codepad.org 编译通过,未运行)
判断两个单链表是否相交,如相交的话求交点。
方法:
记录两个链表的长度差。然后长的那个先出发,当剩下的长度和短的相同时,短的链表也出发。
当两个链表遍历到结点相同时,为相交结点。
若两个链表无交点,则最后结点为NULL。直接返回即可
- typedef struct tagNode{
- int value;
- struct tagNode* next;
- } Node;
- Node *getintersection(Node* llist1, Node* llist2){
- if(llist1 == NULL || llist2 == NULL) return NULL;
- int count1, count2;
- count1 = count2 = 1;
- Node* ptr1 = llist1;
- Node* ptr2 = llist2;
- while(ptr1!=NULL){
- ptr1 = ptr1->next;
- count1++;
- }
- while(ptr2!=NULL){
- ptr2 = ptr2->next;
- count2++;
- }
-
- ptr1 = llist1;
- ptr2 = llist2;
- int dis = count1-count2;
- while(dis>0){
- ptr1 = ptr1->next;
- dis--;
- }
- while(dis<0){
- ptr2 = ptr2->next;
- dis++;
- }
-
- while(ptr1!=ptr2){
- ptr1=ptr1->next;
- ptr2=ptr2->next;
- }
- //if the 2 linked lists does not share the same end node,it will return NULL
- return ptr1;
- }
- int main(){
- return 0;
- }
阅读(2951) | 评论(0) | 转发(1) |