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;
    }
  • 相关阅读:
    Android笔记之添加退出确认对话框
    Android笔记之menu与ActionBar使用
    Android学习笔记之File存储(sd卡)
    cron 在线 表达式
    springboot
    mybatis 查询标签
    div display 常用属性
    css height VS min-height
    struts标签 解析html标签
    CSS 后代选择器
  • 原文地址:https://www.cnblogs.com/dongma/p/13925598.html
Copyright © 2011-2022 走看看