单链表上插入结点算法
时间: 2024-09-13 13:09:44 浏览: 49
单链表上插入结点的算法通常分为两种情况:在链表头部插入和在链表尾部插入,以及在指定位置插入。
1. **在链表头部插入** (也称为头插法):
- 首先创建一个新的节点 `new_node`,并将其 `next` 指针设置为当前链表的头节点 `head`。
- 然后将原头节点 `head` 的 `next` 指向新节点 `new_node`。
- 最终,`new_node` 成为了新的头节点。
2. **在链表尾部插入**:
- 如果链表为空,则直接将新节点设为头节点。
- 否则,从头节点开始遍历,直到找到最后一个节点,其 `next` 指向空。
- 在这个节点之后插入新节点,即将新节点的 `next` 设置为原来的最后一个节点。
3. **在指定位置插入**:
- 需要有一个额外的指针 `current` 用于定位到要插入的位置。
- 从头节点开始遍历,直到找到 `current` 节点满足条件(通常是其 `next` 不为空且等于目标位置)。
- 在 `current.next` 插入新节点,此时新节点的 `next` 设为 `current.next`,而 `current.next` 设为新节点。
以下是伪代码示例:
```plaintext
function insertAtHead(new_node):
new_node.next = head
head = new_node
function insertAtTail(new_node, head):
if head is None:
head = new_node
else:
current = head
while current.next != None:
current = current.next
current.next = new_node
function insertAtPosition(new_node, position, head):
current = head
count = 0
while count < position - 1 and current.next is not None:
current = current.next
count++
if count == position - 1:
new_node.next = current.next
current.next = new_node
```
阅读全文