赞
踩
值得注意的是,除了输入的两个链表,这里可以不用理会输入示例中的其他内容,我也不知道这些东西有什么用。
双指针法,顾名思义就是设置两个指针p1,p2分别从headA和headB开始,同时依次往下走,当某一个指针走到该链表的末尾时,将该指针重新指向另一条链表的开端,为了方便理解,我画了一个图:
由于headA与headB虽然各自长度不同,但它们的长度之和是恒定的,故p1,p2终会相遇!
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { struct ListNode* p = headA; struct ListNode* q = headB; while (p != q) { if (p) p = p->next; else p = headB; if (q) q = q->next; else q = headA; } return p; }
执行结果:
看完不妨点个赞
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。