单链表和双链表的查找,增加,删除,修改相关代码
时间: 2023-09-18 08:08:06 浏览: 40
单链表的定义和基本操作:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
```
查找:
```c++
ListNode* find(ListNode* head, int val) {
ListNode* curr = head;
while (curr != NULL && curr->val != val) {
curr = curr->next;
}
return curr;
}
```
增加:
```c++
void insert(ListNode* &head, int val) {
ListNode* newNode = new ListNode(val);
newNode->next = head;
head = newNode;
}
```
删除:
```c++
void remove(ListNode* &head, int val) {
ListNode* curr = head;
ListNode* prev = NULL;
while (curr != NULL && curr->val != val) {
prev = curr;
curr = curr->next;
}
if (curr == NULL) {
return;
}
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
delete curr;
}
```
修改:
```c++
void modify(ListNode* head, int val, int newVal) {
ListNode* curr = find(head, val);
if (curr != NULL) {
curr->val = newVal;
}
}
```
双链表的定义和基本操作:
```c++
struct ListNode {
int val;
ListNode *prev;
ListNode *next;
ListNode(int x) : val(x), prev(NULL), next(NULL) {}
};
```
查找:
```c++
ListNode* find(ListNode* head, int val) {
ListNode* curr = head;
while (curr != NULL && curr->val != val) {
curr = curr->next;
}
return curr;
}
```
增加:
```c++
void insert(ListNode* &head, int val) {
ListNode* newNode = new ListNode(val);
newNode->next = head;
if (head != NULL) {
head->prev = newNode;
}
head = newNode;
}
```
删除:
```c++
void remove(ListNode* &head, int val) {
ListNode* curr = find(head, val);
if (curr == NULL) {
return;
}
if (curr->prev != NULL) {
curr->prev->next = curr->next;
} else {
head = curr->next;
}
if (curr->next != NULL) {
curr->next->prev = curr->prev;
}
delete curr;
}
```
修改:
```c++
void modify(ListNode* head, int val, int newVal) {
ListNode* curr = find(head, val);
if (curr != NULL) {
curr->val = newVal;
}
}
```