zoukankan      html  css  js  c++  java
  • 【中级算法】9.相交链表

    题目:

    编写一个程序,找到两个单链表相交的起始节点。
    
     
    
    例如,下面的两个链表:
    
    A:          a1 → a2
                       ↘
                         c1 → c2 → c3
                       ↗            
    B:     b1 → b2 → b3
    在节点 c1 开始相交。
    
     
    
    注意:
    
    如果两个链表没有交点,返回 null.
    在返回结果后,两个链表仍须保持原有的结构。
    可假定整个链表结构中没有循环。
    程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
    

      解题算法:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        int lengthList(struct ListNode *head){
            int count = 0;
    
            if(head == NULL){
                return 0;
            }
    
            while(head){
                head = head->next;
                count++;
            }
    
            return count;
        }
     
        ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
            int l1 = lengthList(headA);
            int l2 = lengthList(headB);
            ListNode * node1 = NULL;
            ListNode * node2 = NULL;
            
            if(headA == NULL || headB == NULL){
                return NULL;
            }
            
            if(l1 > l2){
                while(l1!=l2){
                    headA = headA->next;
                    l1--;
                }
            }
            
            if(l1 < l2){
                 while(l1!=l2){
                    headB = headB->next;
                    l2--;
                }
            }
            
            while(headA->next&&headB->next&& headA!=headB){
                headA = headA->next;
                headB = headB->next;
            }
            
            if(headA!=headB){
                return NULL;
            }else{
                return headA;
            }
        }
    };
    

      

  • 相关阅读:
    I00038 自守数(Automorphic number)
    I00036 盈数(Abundant number)
    I00036 盈数(Abundant number)
    I00037 亏数(Deficient number)
    I00037 亏数(Deficient number)
    I00035 完美数(Perfect number)
    I00035 完美数(Perfect number)
    I00034 累加与累乘
    I00034 累加与累乘
    codeforces589J 简单dfs,队列
  • 原文地址:https://www.cnblogs.com/mikemeng/p/9206964.html
Copyright © 2011-2022 走看看