美文网首页
160. 相交链表

160. 相交链表

作者: DAFFE | 来源:发表于2018-08-17 17:44 被阅读0次

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

如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

/**
 * 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 *cur1=headA, *cur2=headB;
        while (cur1!=cur2){
            cur1= cur1?cur1->next:headB;
            /*不相等且不为空指向下一个;不相等为空指向b头指针*/
            cur2= cur2?cur2->next:headA;
           /*不相等且不为空指向下一个;不相等为空指向a头指针*/
        }
        return cur1;
/*这个思路就是 ListA + ListB = A + intersection + Bb + intersection
             ListB + ListA = Bb + intersection + A + intersection
  用大A表示ListA里面非共有 Bb表示listB里面非共有的,可以看到在第二个intersection的开头两个链表长度是一样的,必然相等
  所以我们可以遍历A再遍历B,另一个遍历B再遍历A,两个指针必定在第二个交集处相遇,没有交集就是空指针
*/

    }
};
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *cur1=headA, *cur2=headB;
        if (cur1==NULL || cur1==NULL) return NULL;
        while (cur1!=cur2){
            if (cur1==NULL) cur1=headB;
            else cur1=cur1->next;
            if (cur2==NULL) cur2=headA;
            else cur2=cur2->next;
        }
        return cur1;
/* a-b和b-a遍历到最后->next都指向尾部指针null,返回null
    }
};

相关文章

  • 160. 相交链表

    160. 相交链表[https://leetcode.cn/problems/intersection-of-tw...

  • TOP 100 51 - 56

    160. 相交链表[https://leetcode-cn.com/problems/intersection-o...

  • 160. 相交链表

    160. 相交链表[https://leetcode-cn.com/problems/intersection-o...

  • LeetCode 156-160

    160. 相交链表[https://leetcode-cn.com/problems/intersection-o...

  • LeetCode 160. 相交链表

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 示例 1: 输入:intersectVal = ...

  • leetcode的题目160

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 例如,下面的两个链表: 在节点 c1 开始相交。...

  • 每周 ARTS 第 6 期

    1. Algorithm 160. 相交链表(简单) 描述: 编写一个程序,找到两个单链表相交的起始节点。 示例:...

  • 160. 相交链表

    160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示...

  • LeetCode刷题分类之双指针160. 相交链表

    160. 相交链表 题目 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交...

  • 【LeetCode】链表专题

    160.相交链表 返回两个链表相交的节点 19.删除链表的倒数第N个节点 返回链表的头结点。 21.合并两个有序链表

网友评论

      本文标题:160. 相交链表

      本文链接:https://www.haomeiwen.com/subject/erstiftx.html