• 求链表的第一个公共节点


    求链表的第一个公共节点主要思想

    有如下两个链表:

    有以下两种方法

    1. 上述链表,有一种蛮力方法,就是从一个链表中每一个节点,与另外链表中的节点,去比较,
      如果从中找到相同的节点,表示有公共节点,这个算法时间复杂度为O(n*m),两个链表的长度分别为n,m

    2. 如果使用快慢指针,让链表长的指针,先走,走的步数就为,两者长度差,如果两者有相同节点,必然会在一个地方,相遇,
      该算法的时间复杂度为O(max(n,m))

    方法2 的实现代码为:

    /*
    struct ListNode {
    	int val;
    	struct ListNode *next;
    	ListNode(int x) :
    			val(x), next(NULL) {
    	}
    };*/
    class Solution {
    public:
        
        int lenOfList(ListNode* pHead){
            int len = 0;
            while( pHead != NULL){
                ++len;
                pHead = pHead->next;
            }
            return len;    
        }
        
        ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
            if(pHead1 == NULL || pHead2 == NULL)
                   return NULL;
            int len1,len2,k;
            ListNode *pFast=NULL,*pSlow=NULL;
            
            len1 = lenOfList(pHead1);
            len2 = lenOfList(pHead2);
            if(len1 >len2){
                pFast = pHead1;
                k = len1-len2;
                pSlow = pHead2;
            }else{
                 pFast = pHead2;
                 k = len2-len1;
                 pSlow = pHead1;
            }
            int i=0;
            while(i<k){
                pFast = pFast->next;
                ++i;
            }
            
            while(pFast != NULL && pSlow != NULL){
                if(pFast == pSlow ){
                    return pFast;
                }
                pFast = pFast->next;
                pSlow = pSlow->next;
                
            }
            return NULL;     
        }
    };
    
    
  • 相关阅读:
    Django【二】自定义web框架
    Django【一】web框架的本质
    Django【零】HTTP协议
    【前端】bootstrap引入
    【前端】jquery基础学习
    socket模块粘包现象理解以及解决思路
    面向对象编程学习笔记
    socket模块
    CPU缓存体系对Go程序的影响
    测试Go代码 单元测试
  • 原文地址:https://www.cnblogs.com/wanshuafe/p/11717400.html
Copyright © 2020-2023  润新知