zoukankan      html  css  js  c++  java
  • LeetCode160.相交链表

    编写一个程序,找到两个单链表相交的起始节点。

    例如,下面的两个链表:

    A:          a1 → a2
                       ↘
                         c1 → c2 → c3
                       ↗            
    B:     b1 → b2 → b3
    

    在节点 c1 开始相交。

    注意:

    • 如果两个链表没有交点,返回 null.
    • 在返回结果后,两个链表仍须保持原有的结构。
    • 可假定整个链表结构中没有循环。
    • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
      /**
       * Definition for singly-linked list.
       * public class ListNode {
       *     int val;
       *     ListNode next;
       *     ListNode(int x) {
       *         val = x;
       *         next = null;
       *     }
       * }
       */
      public class Solution {
          public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
              if (headA == null || headB == null) {
                  return null;
              }
              int lenA = len(headA);
              int lenB = len(headB);
              if (lenA>lenB) {
                  while (lenA != lenB) {
                      headA = headA.next;
                      lenA--;
                  }
              } else {
                  while (lenA != lenB) {
                      headB = headB.next;
                      lenB--;
                  }
              }
              while (headA != headB) {
                  headA = headA.next;
                  headB = headB.next;
              }
              
              return headA;
          }
          private int len(ListNode headA) {
              int len = 0;
              while (headA != null) {
                  headA = headA.next;
                  len++;
              }
              return len;
          }
      }
  • 相关阅读:
    [每日一题]石子合并 -- 区间DP
    [每日一题]: 最长上升子序列 AND 最长不上升子序列
    [每日一题]:最大子矩阵和
    入门DP--最大子段和
    [转载]:正确的提问方式
    springmvc.xml
    service层springservice.xml文件
    aop切面配置
    配置事务通知
    短信验证
  • 原文地址:https://www.cnblogs.com/airycode/p/9778224.html
Copyright © 2011-2022 走看看