双向链表插入一个新的结点
时间: 2023-05-30 19:04:36 浏览: 111
双向链表内结点的插入(C++)
双向链表插入一个新的结点的步骤如下:
1. 创建一个新的结点,设置其数据域为要插入的数据。
2. 将新的结点的 next 指针指向要插入的位置的下一个结点,将新的结点的 prev 指针指向要插入的位置的前一个结点。
3. 将要插入的位置的前一个结点的 next 指针指向新的结点,将要插入的位置的下一个结点的 prev 指针指向新的结点。
4. 如果要插入的位置是链表的头结点,则需要更新链表的头指针。
示例代码:
```
// 双向链表结点定义
struct ListNode {
int val;
ListNode *prev;
ListNode *next;
ListNode(int x) : val(x), prev(NULL), next(NULL) {}
};
// 双向链表插入结点
void insertNode(ListNode* &head, int val, int pos) {
ListNode* newNode = new ListNode(val);
if (pos == 0) {
newNode->next = head;
if (head)
head->prev = newNode;
head = newNode;
} else {
ListNode* p = head;
int i = 0;
while (p && i < pos - 1) {
p = p->next;
i++;
}
if (p) {
newNode->next = p->next;
if (p->next)
p->next->prev = newNode;
p->next = newNode;
newNode->prev = p;
}
}
}
```
阅读全文