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
}
目录
相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
195 1
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
300 0
【链表】算法题(二) ----- 力扣/牛客
【链表】算法题(二) ----- 力扣/牛客
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
308 0
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
111 0
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
193 0
【链表】算法题(一) ----- 力扣 / 牛客
【链表】算法题(一) ----- 力扣 / 牛客
|
存储 Python
【Leetcode刷题Python】1496.判断路径是否相交
Leetcode第1496题"判断路径是否相交"的Python代码实现,通过使用字典存储方向和集合记录访问过的坐标点来检测路径是否与自身相交。
220 2
|
算法 Python
【Leetcode刷题Python】106.相交链表
采用双指针法来找出两个链表的相交起始节点,并详细解释了算法的时间和空间复杂度。
188 1
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
350 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行