zoukankan      html  css  js  c++  java
  • 输入两个链表,找出它们的第一个公共结点

    链表结点定义如下

    struct ListNode {
        int val;
        ListNode* next;
    };

    思路:

    1,两个单向链表有交点,比然从交点位置到结尾,节点的值都是一样的

    2,一般链表问题都考虑下能否使用快慢指针来解决问题

    3,求出两个链表长度的差值diff,快指针先走diff步

    4,然后快慢指针同时走,如果快慢指针首次val值相同,则这个点为交点

    ListNode* findFrrstCommonNode(ListNode* firstHead,ListNode* secondHead) {
       int firstLen = getListLength(firstHead);
       int secondLen = getListLength(secondHead);
    
    
       ListNode* fastNode = firstHead;
       ListNode* slowNode = secondHead;
       int diff = firstLen - secondLen;
       if (secondLen > firstLen) {
           diff = secondLen - firstLen;
           fastNode = secondHead;
           slowNode = firstHead;
       }
       for (int i = 0; i < diff; i++)
       {
           fastNode = fastNode->next;
       }
    
       while (fastNode != NULL && slowNode != NULL && fastNode->val != slowNode->val) {
           fastNode = fastNode->next;
           slowNode = slowNode->next;
       }
       return fastNode;
    }
    int getListLength(ListNode* node){
        int count = 0;
        while (node != NULL){
            node = node->next;
            count++;
        }
        return count;
    }
  • 相关阅读:
    html5 标签
    开发中常见问题
    This Android SDK requires Andriod Developer Toolkit version 23.0.0 or above
    onActivityResult 要加判断
    expandlistview child 不可点击
    自定义dialog布局
    mediaPlayer 播放
    转载 收藏 listview判断是否在底部
    mediaPlayer
    org.apache.http.legacy.jar 兼容
  • 原文地址:https://www.cnblogs.com/dongma/p/13925598.html
Copyright © 2011-2022 走看看