zoukankan      html  css  js  c++  java
  • 剑指offer-两个链表的第一个公共节点

    题目描述

    输入两个链表,找出它们的第一个公共结点。

     

    解题思路

    分析可得如果两个链表有公共节点,那么公共节点出现在两个链表的尾部,即从某一节点开始,两链表之后的节点全部相等。可以首先遍历两个链表得出各自的长度l1、l2,然后让长度较大的链表向前走l(max)-l(min)步,接着两个链表分别向后遍历,如果遇到节点值相等的就返回,直到指针指向NULL。

     

    代码

     1 /*
     2 struct ListNode {
     3     int val;
     4     struct ListNode *next;
     5     ListNode(int x) :
     6             val(x), next(NULL) {
     7     }
     8 };*/
     9 class Solution {
    10 public:
    11     ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
    12         int l1 = GetListLenth(pHead1);
    13         int l2 = GetListLenth(pHead2);
    14         if(l1 >= l2){
    15             int ls = l1-l2;
    16             while(ls-- > 0)
    17                 pHead1 = pHead1->next;
    18         }
    19         else{
    20             int ls = l2-l1;
    21             while(ls-- > 0)
    22                 pHead2 = pHead2->next;
    23         }
    24         while(pHead1 != NULL){
    25             if(pHead1->val == pHead2->val)
    26                 return pHead1;
    27             else{
    28                 pHead1 = pHead1->next;
    29                 pHead2 = pHead2->next;
    30             }
    31         }
    32         return pHead1;
    33     }
    34     int GetListLenth(ListNode* pHead){
    35         ListNode* p = pHead;
    36         int l = 0;
    37         while(p != NULL){
    38             l++;
    39             p = p->next;
    40         }
    41         return l;
    42     }
    43 };
  • 相关阅读:
    练习四十:数组逆向输出
    练习三十九:数组插入排序
    Java awt组件间的继承关系
    java ArrayList
    java Scanner中的hasNext()方法
    java中String对象的存储位置
    java初始化块执行顺序
    java二维数组
    java数组变量
    Java数组初始
  • 原文地址:https://www.cnblogs.com/wmx24/p/8668536.html
Copyright © 2011-2022 走看看