golang力扣leetcode 160.相交链表

简介: golang力扣leetcode 160.相交链表

160.相交链表

160.相交链表

题解

思路1:

1.用map存A的所有节点,赋值为true
2.遍历B的节点,如果map[cnt]=true说明就是交点

思路2:

1.统计A的长和B的长,谁长谁先走几步,走到长度一致位置
2.A和B一起走,遇到相同的节点返回即可
3.如果不相交,返回nil

思路3:

1.设链表A的不相交长为m,B不相交从部分为n,相交长为c,即len(A)=m+c,len(B)=n+c
2.循环,A和B一起走,如果A走到nil了,则A赋值为B的头,如果B走到nil了,则B赋值为A的nil
3.则A走了m+c+n,B走了n+c+m
4.m+c+n即走完了一遍A,并且走完了B的不相交部分,刚好停在了相交节点
5.而如果不相交,就是nil了

代码

func getIntersectionNode(headA, headB *ListNode) *ListNode {
  mp := make(map[*ListNode]bool)
  cur := headA
  for cur != nil {
    mp[cur] = true
    cur = cur.Next
  }
  for headB != nil {
    if mp[headB] {
      return headB
    }
    headB = headB.Next
  }
  return nil
}
func getIntersectionNode(headA, headB *ListNode) *ListNode {
  lenA := getLength(headA)
  lenB := getLength(headB)
  if lenA > lenB {
    cnt := lenA - lenB
    for i := 0; i < cnt; i++ {
      headA = headA.Next
    }
  } else {
    cnt := lenB - lenA
    for i := 0; i < cnt; i++ {
      headB = headB.Next
    }
  }
  for headA != nil && headB != nil {
    if headA == headB {
      return headB
    }
    headA = headA.Next
    headB = headB.Next
  }
  return nil
}
func getLength(root *ListNode) int {
  ans := 0
  for root != nil {
    ans++
    root = root.Next
  }
  return ans
}
func getIntersectionNode(headA, headB *ListNode) *ListNode {
  curA, curB := headA, headB
  for curA != curB {
    if curA != nil {
      curA = curA.Next
    } else {
      curA = headB
    }
    if curB != nil {
      curB = curB.Next
    } else {
      curB = headA
    }
  }
  return curA
}
目录
相关文章
|
5月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
58 1
|
5月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
79 0
Leetcode第21题(合并两个有序链表)
|
5月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
43 1
|
5月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
53 0
LeetCode第二十四题(两两交换链表中的节点)
|
5月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
135 0
|
5月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
45 0
|
5月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
82 0
|
6月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
83 6
|
7月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
168 2