单链表的建立插入和删除代码
时间: 2024-09-20 12:16:46 浏览: 40
单链表是一种线性的数据结构,它由节点组成,每个节点包含两个部分:存储数据的值和指向下一个节点的指针。以下是单链表的一些基本操作:
1. **建立(创建)**:
- C++示例:
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {} // 构造函数用于初始化新节点
};
```
- Java示例:
```java
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; next = null; } // 构造方法
}
```
2. **插入**:
- 插入到头结点:如果链表为空,则直接新建一个头结点。
```cpp
void insertAtHead(ListNode* &head, int val) {
head = new ListNode(val);
if (head->next != nullptr)
head->next->prev = head;
}
```
- 插入到指定位置:需要找到插入位置前的节点并更新其`next`指针。
```cpp
void insertAtPosition(ListNode* &head, int pos, int val) {
ListNode* newNode = new ListNode(val);
for (int i = 0; i < pos && head != nullptr; ++i, head = head->next)
;
if (head == nullptr) return; // 如果pos越界
newNode->next = head;
if (head != nullptr)
head->prev = newNode;
}
```
3. **删除**:
- 删除头节点:只需将头节点指向第二个节点即可。
```cpp
void deleteFromHead(ListNode* &head) {
if (head != nullptr) {
ListNode* temp = head;
head = head->next;
delete temp;
}
}
```
- 删除指定节点:需要先找到待删除节点的前一个节点,然后修改它的`next`指针。
```cpp
void deleteNode(ListNode* &head, int val) {
ListNode *prev = nullptr;
while (head != nullptr && head->val != val) {
prev = head;
head = head->next;
}
if (head == nullptr) return; // 没有找到该节点
if (prev != nullptr)
prev->next = head->next;
else
head = head->next;
delete head;
}
```
阅读全文