160.相交链表(C++)

题目英文描述:
Write a program to find the node at which the intersection of two singly linked lists begins.

题目中文描述:
编写一个程序,找到两个单链表相交的起始节点。

思路:双指针,分别初始化为A、B两个链表的头结点,然后逐渐遍历,当一个指针到达链尾则指向另一个链表的头结点,当两个指针相等且都不为空时则该结点则为相交结点,如果都为空则不相交。

代码:

/**
 * 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) {
        if(headA == NULL || headB == NULL) return NULL;
        ListNode* a, * b;
        a = headA, b = headB;
        while(a != b) { 
            //判断条件为是否相等,因此NULL当特殊结点处理,不能直接转换成另一个头结点,否则死循环。
            if(a == NULL) a = headB;
            else a = a->next;
            if(b == NULL) b = headA;
            else b = b->next;
        }
        return a;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。