zoukankan      html  css  js  c++  java
  • LeetCode 160. 相交链表(Intersection of Two Linked Lists)

    题目描述

    编写一个程序,找到两个单链表相交的起始节点。

     

    例如,下面的两个链表:

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

    在节点 c1 开始相交。

     

    注意:

    • 如果两个链表没有交点,返回 null.
    • 在返回结果后,两个链表仍须保持原有的结构。
    • 可假定整个链表结构中没有循环。
    • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

    解题思路

    首先分别获得两个链表的长度,然后让较长的链表先走两个长度的差值,使得两链表尾部对齐。然后两个链表再同时向后移动,并比较节点是否相等。

    代码

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     int getLength(ListNode *head){
    12         int len = 0;
    13         ListNode *node = head;
    14         while(node){
    15             len++;
    16             node = node->next;
    17         }
    18         return len;
    19     }
    20     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    21         int lenA = getLength(headA), lenB = getLength(headB);
    22         if(lenA < lenB) return getIntersectionNode(headB, headA);
    23         int p = lenA - lenB;
    24         ListNode *nodeA = headA, *nodeB = headB;
    25         while(p){
    26             nodeA = nodeA->next;
    27             p--;
    28         }
    29         while(nodeA){
    30             if(nodeA == nodeB) break;
    31             nodeA = nodeA->next;
    32             nodeB = nodeB->next;
    33         }
    34         return nodeA;
    35     }
    36 };
  • 相关阅读:
    机房收费系统总结
    python手记(45)
    Hbase深入学习(二) 安装hbase
    Java异常机制
    MySQL 分析服务器状态
    人生感悟:人生像吃自助餐
    Android使用蓝牙连接adb调试App
    JQuery DataTables 列自己定义数据类型排序
    Android-自己定义图像资源的使用(1)
    11款开放中文分词引擎大比拼
  • 原文地址:https://www.cnblogs.com/wmx24/p/9713865.html
Copyright © 2011-2022 走看看