go数组变链表

func ll(nums []int, head *ListNode) *ListNode {
	fnode := head
	for _, num := range nums {
		temp := ListNode{Val: num}
		head.Next = &temp
		head = &temp
	}
	return fnode.Next
}
### 不同数据结构的特点和使用场景 #### 数组 数组是一种线性数据结构,在一段连续的内存空间中存储多个类型相同的数据[^3]。其特点如下: - **访问速度**:通过索引可以直接快速定位到任意位置,因此查找操作的时间复杂度为 O(1)。 - **固定大小**:一旦创建后无法改长度。 ```python arr = [1, 2, 3, 4, 5] print(arr[0]) # 输出第一个元素 ``` #### 链表 链表由一系列节点组成,每个节点包含数据部分以及指向下一个节点的指针[^4]。主要特性有: - **动态扩展**:可以根据需求增加或删除结点而不需要移动其他元素的位置; - **随机访问效率低**:由于不是连续分配的空间,所以不支持像数组那样高效地按位获取元素; ```python class Node: def __init__(self, data=None): self.data = data self.next = None node1 = Node(1) node2 = Node(2) node1.next = node2 ``` #### 哈希表 哈希表本质上是一个数组加上特定机制来处理键值映射问题[^2]。具体表现为: - **高速检索**:利用哈希函数计算得到唯一的散列码作为下标存取记录,理想情况下可达到O(1)级别的查询性能; - **解决冲突方法多样**:当两个不同的输入产生了相同的输出时称为碰撞,常用开放寻址法、拉链法等方式应对这种情况; ```python hash_table = {} key = "example" value = 42 hash_table[key] = value if key in hash_table: print(f"{key}: {hash_table[key]}") ``` #### 栈 栈遵循先进后出原则(LIFO),只允许在一端进行插入和删除操作[^1]。典型应用包括表达式求值、括号匹配检测等。 ```c++ #include <stack> using namespace std; std::stack<int> s; // 创建一个整数类型的栈对象s s.push(1); // 向栈顶压入数值1 int topValue = s.top(); // 获取当前栈顶元素并赋给topValue量 s.pop(); // 移除最上面的那个元素 ``` #### 堆 堆通常被用来构建优先级队列,分为最大堆(根节点总是最大的那个)最小堆两种形式。内部维护着完全二叉树性质,并且满足父节点大于等于子节点的关系约束条件。 ```java import java.util.PriorityQueue; PriorityQueue<Integer> minHeap = new PriorityQueue<>(); minHeap.offer(7); minHeap.offer(9); System.out.println(minHeap.peek()); // 返回但并不移除头部元素 minHeap.poll(); // 取走头元素即最小者 ``` #### 队列 队列按照先入先出(FIFO)模式工作,两端分别定义为front 和 rear ,前者负责弹出旧成员后者则接纳新加入者。 ```cpp queue<int> q; q.push(1); // 添加至队尾 cout << q.front() << endl; // 显示队首项 q.pop(); // 出队 ``` #### 树 树形结构是由n(n>=1)个有限节点组成的具有层次关系的整体,其中有一个特殊的起始点叫做根节点,其余各层依次向下分支形成多条路径直至叶节点结束。常见的种类如二叉搜索树BST、平衡二叉树AVL Tree 等都广泛应用于文件系统目录管理等领域内。 ```javascript function TreeNode(val){ this.val=val; this.left=null; this.right=null; } let root=new TreeNode('A'); root.left=new TreeNode('B'); root.right=new TreeNode('C'); console.log(JSON.stringify(root)); ``` #### 图 图形化描述实体间关联性的抽象模型,既可以是有向边也可以无方向连接两定点之间存在权重属性的话就构成了带权图。适用于社交网络分析、地图导航规划等方面。 ```go type Graph struct { vertices map[string][]string } func (g *Graph) AddEdge(from string, to string) { g.vertices[from] = append(g.vertices[from], to) } graph := &Graph{vertices: make(map[string][]string)} graph.AddEdge("A", "B") fmt.Println(graph.vertices["A"]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值