zoukankan      html  css  js  c++  java
  • 链表习题(5)-给定两个单链表,编写算法找出两个链表的公共结点

     1 /*给定两个单链表,编写算法找出两个链表的公共结点*/
     2 /*
     3     算法思想:两个链表有公共结点的话,那么从第一个公共结点开始,后面的结点都是相同的,不可
     4     能出现分叉。又由于两个链表的长度不一定一样,故不能同时遍历两个链表。
     5     可以先得到两个链表的长度l1,l2,设l1-l2=k,那么在教长的链表上遍历k个结点,在同步遍历两个链
     6     表,保证两个链表同时到达最后一个节点,这样也就保证了能够同时到达第一个公共结点。
     7 */
     8 LinkList SearchFirstCommon(LinkList L1, LinkList L2)
     9 {
    10     int len1 = getLength(L1), len2 = getLength(L2);    //获取两个线性表的长度
    11     LinkList longList, shortList;        //用于指向教长,较短链表的第一个结点
    12     int dist;
    13     if (len1 > len2)
    14     {
    15         longList = L1->next;
    16         shortList = L2->next;
    17         dist = len1 - len2;
    18     }
    19     else
    20     {
    21         longList = L2->next;
    22         shortList = L1->next;
    23         dist = len2 - len1;
    24     }
    25     while (dist--)
    26     {
    27         longList = longList->next;
    28     }
    29     while (longList!=NULL)
    30     {
    31         if (longList == shortList)    //找到公共结点,返回
    32             return longList;
    33         else
    34         {
    35             longList = longList->next;
    36             shortList = shortList->next;
    37         }
    38     }
    39     return NULL;    //没有公共结点
    40 }
  • 相关阅读:
    最短路之dijkstra算法
    拓扑排序 topsort详解
    POJ2236 Wireless Network 并查集简单应用
    最小生成树详解 prim+ kruskal代码模板
    并查集详解及模板
    POJ 3190 Stall Reservations贪心
    chapter22:源码与Tarball之(1)-传统方法编译与make方法进行编译
    vi的用法
    centos7 connect internet
    java内存区域
  • 原文地址:https://www.cnblogs.com/KBryant/p/11645215.html
Copyright © 2011-2022 走看看