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;
          }
      }
  • 相关阅读:
    hdu5119 DP
    poj3692 最大点权独立集/最大独立集
    poj2125 最小点权覆盖集
    二分图总结
    poj2531 Network Saboteur
    poj1573 Robot Motion
    poj2632 Crashing Robots
    poj1068
    动态规划的思考(三)
    代刷题目分类(三)
  • 原文地址:https://www.cnblogs.com/airycode/p/9778224.html
Copyright © 2011-2022 走看看