博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 160 Intersection of Two Linked Lists
阅读量:4618 次
发布时间:2019-06-09

本文共 2484 字,大约阅读时间需要 8 分钟。

Write a program to find the node at which the intersection of two singly linked lists begins.

For example, the following two linked lists:

A: —— a1 → a2
———————- ↘
———————— c1 → c2 → c3
———————–↗
B: b1 → b2 → b3

begin to intersect at node c1.

Notes:

•If the two linked lists have no intersection at all, return null.
•The linked lists must retain their original structure after the function returns.
•You may assume there are no cycles anywhere in the entire linked structure.
•Your code should preferably run in O(n) time and use only O(1) memory.

这里写图片描述

非常优雅的解决方案:

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {    ListNode *p1 = headA;    ListNode *p2 = headB;    if (p1 == NULL || p2 == NULL) return NULL;    while (p1 != NULL && p2 != NULL && p1 != p2)     {        p1 = p1->next;        p2 = p2->next;        //        // Any time they collide or reach end together without colliding         // then return any one of the pointers.        //        if (p1 == p2) return p1;        //        // If one of them reaches the end earlier then reuse it         // by moving it to the beginning of other list.        // Once both of them go through reassigning,         // they will be equidistant from the collision point.        //        if (p1 == NULL) p1 = headB;        if (p2 == NULL) p2 = headA;    }    return p1;    //上面似乎不需要,上面的路径应该都有返回值,要不要都ac}

python解决方案:

# Definition for singly-linked list.# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    # @param two ListNodes    # @return the intersected ListNode    def getIntersectionNode(self, headA, headB):        curA,curB = headA,headB        lenA,lenB = 0,0        while curA is not None:            lenA += 1            curA = curA.next        while curB is not None:            lenB += 1            curB = curB.next        curA,curB = headA,headB        if lenA > lenB:            for i in range(lenA-lenB):                curA = curA.next        elif lenB > lenA:            for i in range(lenB-lenA):                curB = curB.next        while curB != curA:            curB = curB.next            curA = curA.next        return curA/*The solution is straightforward: maintaining two pointers in the lists under the constraint that both lists have the same number of nodes starting from the pointers. We need to calculate the length of each list though. So O(N) for time and O(1) for space.*/

转载于:https://www.cnblogs.com/wangyaning/p/7853977.html

你可能感兴趣的文章
CentOS7部署kettle
查看>>
kill指定用户所有进程
查看>>
Kerberos身份验证访问Web HttpFS
查看>>
kinit: Bad encryption type while getting initial credentials
查看>>
Kafka学习笔记
查看>>
CDH配置YARN动态资源分配
查看>>
CentOS7部署HDP3.1.0.0
查看>>
Zookeeper集群部署
查看>>
Hadoop基础概念
查看>>
运维平台开发
查看>>
HIVE-分区表详解以及实例
查看>>
python内置下载服务器
查看>>
CDH部署StreamSets
查看>>
AutoParamOptimizer开发日志 9.9 old
查看>>
iOS 上传多个文件
查看>>
如何gif图片转data?完整解决
查看>>
获取手机的网络类型
查看>>
iOS手写签批
查看>>
for...in... 循环 处理一组按钮的选中状态变动
查看>>
python 函数(function)、函数(def)、函数(return)
查看>>