单链表的插入和删除操作
###单双链表结点定义
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
单链表的操作
将cur结点插入到单链表中。
- 普通结点的插入
在prev结点和next结点之间插入cur结点。
cur->next = next;
prev->next = cur;
return head;
- 插入到头结点
将cur结点插入单链表作为头结点。
cur->next = head;
return cur;
- 插入到尾结点
将cur结点插入单链表作为尾结点,此情况可归为普通结点的插入。
cur->next = nullptr;
tail->next = cur;
return head;
删除操作
- 普通结点的删除
删除cur结点,cur前后都有结点prev和next。
prev->next = next;
return head;
- 删除头结点
return head->next;
双链表的插入和删除操作
双链表结点定义
struct DoublyListNode {
int val;
DoublyListNode *next;
DoublyListNode *prev;
DoublyListNode(int x) : val(x), next(NULL), prev(NULL) {}
};
双链表的操作
将cur结点插入到双链表中。
- 普通结点的插入
在prev结点和next结点之间插入cur结点。
cur->prev = prev;
cur->next = prev->next;
prev->next = cur;
cur->next->prev = cur;
return head;
- 插入到头结点
将cur结点插入双链表作为头结点。
cur->prev = nullptr;
cur->next = head;
head->next = cur;
return cur;
- 插入到尾结点
将cur结点插入双链表作为尾结点。
cur->prev = tail;
cur->next = nullptr;
tail->next = cur;
return head;
删除操作
- 普通结点的删除
删除cur结点,cur前后都有结点。
cur->prev->next = cur->next;
cur->next->prev = cur->prev;
return head;
- 删除头结点
head->next->prev = nullptr;
return head->next;
- 删除尾结点
tail->prev->next = nullptr;
return head;