程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Intersection of Two Linked Lists

Intersection of Two Linked Lists

編輯:關於C++

題目: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.
    示例代碼如下:
    class Solution {
    public:
        ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    		if(headA==NULL ||headB==NULL)
    			return NULL;
    		int lenHeadA=0,lenHeadB=0;
    		ListNode *p=headA,*q=headB;
    		//求鏈表headA和headB的長度
    		while(p){
    			p=p->next;
    			lenHeadA++;
    		}
    		p=headA;
    		while(q){
    			q=q->next;
    			lenHeadB++;
    		}
    		q=headB;
    		int distance=0;
    		if(lenHeadA>lenHeadB){
    			distance=lenHeadA-lenHeadB;
    			for(int i=0;inext;
    		}
    		if(lenHeadAnext;
    		}
    		//循環結束的條件是p==q!=null(有相交點) 
    		//或者是p==q==null(無相交點)
    		while(p!=q){
    			p=p->next;
    			q=q->next;
    		}
    		return p;
    };

     
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved