zoukankan      html  css  js  c++  java
  • "Coding Interview Guide"--打印两个有序链表的公共部分

    题目

      给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。

    分析

      链表可能为空也可能非空,而对于空链表程序不需要进行任何操作;若是非空链表,因为链表有序,所以要么是递增,要么是递减。

      假设两个链表元素是有序递增,用head1和head2依次访问链表元素,那么有四种情况:

      1、如果head1的值小于head2的值,则说明需要在链表1的后续节点中寻找公共节点,此时向后移动head1,不必移动head2;

      2、如果head1的值大于head2的值,则说明需要在链表2的后续节点中寻找公共节点,此时向后移动head2,不必移动head1;

      3、如果head1的值等于head2的值,说明当前节点正是这两个链表的公共部分,打印,然后head1和head2同时向后移,寻找下一个公共节点;

      4、如果head1或者head2任何一个移动到null,说明已完成寻找公共节点的过程,此时整个算法结束。

        

     1 public void printCommon(Node head1, Node head2)
     2 {
     3     while(head1 != null && head2 != null)
     4     {
     5         if(head1.value < head2.value)
     6         {
     7             head1 = head1.next;
     8         }
     9         else if(head1.value > head2.value)
    10         {
    11             head2 = head2.next;
    12         }
    13         else
    14         {
    15             System.out.println(head1.value);
    16             head1 = head1.next;
    17             head2 = head2.next;
    18         }
    19     }
    20 }

    来源:左程云老师《程序员代码面试指南》

  • 相关阅读:
    [Luogu 2261] CQOI2007 余数求和
    [Luogu 3178] HAOI2013 树上操作
    「模板」 树链剖分 HLD
    「模板」 线段树——区间乘 && 区间加 && 区间求和
    [Luogu 2221] HAOI2012 高速公路
    [Luogu 3973] TJOI2015 线性代数
    「模板」 01 Trie实现平衡树功能
    [Luogu 1640] SCOI2010 连续攻击游戏
    [Luogu 1402] 酒店之王
    [Luogu 1963] NOI2009 变换序列
  • 原文地址:https://www.cnblogs.com/OoycyoO/p/10872393.html
Copyright © 2011-2022 走看看