160. 相交链表 力扣(简单) 链表题总有点不熟练

题目描述:

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

 160. 相交链表     力扣(简单)  链表题总有点不熟练

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

题源:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
      /*ListNode *res=NULL;
      while(headA!=NULL)
      {
          ListNode *h=headB;
          while(h!=NULL)
        {
            if (h==headA){res=headA; break;}
            h=h->next;
        }
        if (res!=NULL) break;
        headA=headA->next;
      }
      return res;*/  //暴力法一
      int l1=0,l2=0;
      ListNode *t=headA,*res=NULL;
      while (t!=NULL)
      {
          l1++;
          t=t->next;
      }
      t=headB;
      while (t!=NULL)
      {
          l2++;
          t=t->next;
      }
      if(l2>l1) {t=headA; headA=headB; headB=t; swap(l1,l2);}
      for(int i=1;i<=l1-l2;i++)  headA=headA->next;
      while(headA!=NULL)
      {
          if (headA==headB) {res=headB; break;}
          headA=headA->next;
          headB=headB->next;
      }
      return res;
    }  // 统计两个链表的长度,让长链表走完差值,再一起向后推动
};

  

上一篇:【Leetcode】160. 相交链表


下一篇:160 Scala 映射