golang力扣leetcode 38.复制带随机指针的链表

简介: golang力扣leetcode 38.复制带随机指针的链表

题解

思路:

  1. 复制节点,紧挨到到后面,1->2->3 ==> 1->1’->2->2’->3->3’
  2. 处理random指针
  3. 分离两个链表

代码

package main
type Node struct {
  Val    int
  Next   *Node
  Random *Node
}
func copyRandomList(head *Node) *Node {
  if head == nil {
    return head
  }
  // 复制节点,紧挨到到后面
  // 1->2->3  ==>  1->1'->2->2'->3->3'
  cur := head
  for cur != nil {
    clone := &Node{cur.Val, cur.Next, nil}
    temp := cur.Next
    cur.Next = clone
    cur = temp
  }
  //处理random指针
  cur = head
  for cur != nil {
    if cur.Random != nil {
      cur.Next.Random = cur.Random.Next
    }
    cur = cur.Next.Next
  }
  //分离两个链表
  cur = head
  cloneHead := cur.Next
  for cur != nil && cur.Next != nil {
    temp := cur.Next
    cur.Next = temp.Next
    cur = temp
  }
  return cloneHead
}
func main() {
}


目录
相关文章
|
1月前
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
|
1月前
|
Python
【Leetcode刷题Python】138. 复制带随机指针的链表
LeetCode上题目“138. 复制带随机指针的链表”的Python解决方案,包括两种方法:一种是在每个节点后复制一个新节点然后再分离出来形成新链表;另一种是构建一个字典来跟踪原始节点与其副本之间的映射关系,从而处理新链表的构建。
14 1
|
2月前
|
Java
力扣经典150题第五十八题:合并两个有序链表
力扣经典150题第五十八题:合并两个有序链表
26 2
|
2月前
|
Java
力扣经典150题第六十题:反转链表 II
力扣经典150题第六十题:反转链表 II
19 1
|
2月前
|
存储 Java
力扣经典150题第五十九题: 随机链表的复制
力扣经典150题第五十九题: 随机链表的复制
24 1
|
2月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
20 0
|
2月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
20 0
|
2月前
|
Java 索引
力扣经典150题第五十六题:环形链表
力扣经典150题第五十六题:环形链表
24 0
|
3月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
3月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表