设计一个复制单链表的算法,将已知单链表中的每个结点进行复制为一个新结点,并插入到新的单链表中,要求算法的时间复杂度为O(n)
时间: 2024-09-20 16:17:34 浏览: 41
设计一个复制单链表的算法可以按照以下步骤进行:
1. 创建一个新的头节点,用于存放复制后的链表。
2. 遍历给定的源链表(时间复杂度为O(n),因为我们只访问一次每一个节点),对于每个节点`node`:
- 创建一个新的节点`newNode`,并将其指针设置为空,作为新链表的新节点。
- 将`newNode`的值设为`node`的值,表示复制当前节点的数据。
- 将`newNode`的下一个指针设为当前`node`的下一个节点,因为我们需要沿原链表顺序复制。
- 现在`newNode`就是新链表的一部分,继续遍历。
3. 当遍历完源链表的所有节点后,最后的`newNode`就成为了新链表的最后一个节点。
4. 返回新链表的头节点,此时新链表已经完整地复制了源链表。
以下是这个算法的伪代码示例:
```python
def copyList(originalList):
if not originalList:
return None
newHead = ListNode(originalList.val)
current = originalList
newCurrent = newHead
while current.next:
newNode = ListNode(current.next.val)
newCurrent.next = newNode
newCurrent = newNode
current = current.next
return newHead
```
在这个算法中,我们仅遍历了一次原始链表,所以时间复杂度确实是O(n)。
阅读全文