编写3个函数,分别实现单链表(带头结点)的查询、插入、删除。
时间: 2023-05-31 21:17:55 浏览: 308
### 回答1:
函数1:单链表查询
函数名:searchLinkedList
参数:头结点指针head,待查询元素值value
返回值:若找到返回该元素在链表中的位置,否则返回
函数实现:
int searchLinkedList(Node *head, int value) {
Node *p = head->next;
int pos = 1;
while (p != NULL) {
if (p->data == value) {
return pos;
}
p = p->next;
pos++;
}
return ;
}
函数2:单链表插入
函数名:insertLinkedList
参数:头结点指针head,待插入元素值value,插入位置pos
返回值:若插入成功返回1,否则返回
函数实现:
int insertLinkedList(Node *head, int value, int pos) {
Node *p = head;
int i = ;
while (p != NULL && i < pos - 1) {
p = p->next;
i++;
}
if (p == NULL || i > pos - 1) {
return ;
}
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = value;
newNode->next = p->next;
p->next = newNode;
return 1;
}
函数3:单链表删除
函数名:deleteLinkedList
参数:头结点指针head,待删除元素值value
返回值:若删除成功返回1,否则返回
函数实现:
int deleteLinkedList(Node *head, int value) {
Node *p = head->next;
Node *pre = head;
while (p != NULL) {
if (p->data == value) {
pre->next = p->next;
free(p);
return 1;
}
pre = p;
p = p->next;
}
return ;
}
### 回答2:
单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。在单链表的操作中,常用的有查询、插入和删除。下面将介绍三个函数分别实现单链表的查询、插入、删除。
1. 查询函数
查询函数的作用是查找目标元素在单链表中是否存在。它的参数是一个链表头指针和一个待查找的元素值。查询函数通过遍历单链表,如果找到指定元素,返回该节点的指针;如果未找到,返回 NULL。
代码实现:
```
Node* search(Node* head, int value) {
Node* p = head->next; // 从头结点的下一个节点开始查找
while (p != NULL) {
if (p->data == value) {
return p; // 返回找到的节点
}
p = p->next; // 指针后移
}
return NULL; // 未找到,则返回 NULL
}
```
2. 插入函数
插入函数的作用是在单链表中添加一个新节点。它的参数是一个链表头指针、待插入的位置和待插入的元素值。插入函数先判断待插入位置是否合法,然后创建新节点,将其插入到对应位置。
代码实现:
```
bool insert(Node* head, int pos, int value) {
Node* p = head; // 从头结点开始查找插入位置
for (int i = 0; i < pos && p != NULL; i++) {
p = p->next; // 指针后移
}
if (p == NULL) {
return false; // 插入位置非法,返回失败
}
Node* q = new Node(); // 创建新节点
q->data = value;
q->next = p->next; // 新节点插入到链表中
p->next = q;
return true; // 插入成功
}
```
3. 删除函数
删除函数的作用是删除单链表中的某个节点。它的参数是一个链表头指针和待删除的元素值。删除函数先遍历单链表,找到待删除节点的前一个节点,然后将待删除节点从链表中删除。
代码实现:
```
bool remove(Node* head, int value) {
Node* p = head; // 从头结点开始查找待删除节点
while (p->next != NULL && p->next->data != value) {
p = p->next; // 指针后移
}
if (p->next == NULL) {
return false; // 链表中无待删除节点,返回失败
}
Node* q = p->next; // 待删除节点
p->next = q->next; // 将待删除节点从链表中删除
delete q; // 释放待删除节点的空间
return true; // 删除成功
}
```
综上所述,单链表的查询、插入、删除函数分别实现了单链表的查询、插入、删除操作。它们可以应用在许多实际场景中,如链表排序和链表操作。
### 回答3:
单链表是一种常见的数据结构,它由多个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。单链表可以快速插入和删除元素,但查找需要遍历整个链表。下面将介绍如何用三个函数实现单链表的查询、插入和删除。
1. 实现查询操作
单链表的查询操作需要遍历整个链表,直到找到目标元素或到达链表结尾。代码如下:
```python
def search_linked_list(head, target):
curr = head.next
while curr != None:
if curr.data == target:
return True
curr = curr.next
return False
```
其中,head是单链表的头结点,target是要查找的目标元素。curr表示当前遍历到的节点,初始时指向第一个节点(即头结点的下一个节点)。如果当前节点的元素等于目标元素,则返回True;否则继续遍历下一个节点。如果遍历到链表结尾仍未找到目标元素,则返回False。
2. 实现插入操作
单链表的插入操作需要在指定位置插入新的节点。具体步骤如下:
- 创建新节点,并将其next指针指向插入位置的下一个节点;
- 将插入位置的前一个节点的next指针指向新节点。
代码如下:
```python
def insert_linked_list(head, pos, data):
curr = head
for i in range(pos):
curr = curr.next
new_node = Node(data)
new_node.next = curr.next
curr.next = new_node
```
其中,pos表示插入位置,data表示要插入的数据元素。curr表示当前遍历到的节点,初始时指向头结点。for循环遍历链表,找到插入位置的前一个节点。创建新节点,并将其next指针指向插入位置的下一个节点。将插入位置的前一个节点的next指针指向新节点即可完成插入操作。
3. 实现删除操作
单链表的删除操作需要找到要删除的节点,并将其前一个节点的next指针指向删除节点的下一个节点。代码如下:
```python
def delete_linked_list(head, target):
curr = head
while curr.next != None:
if curr.next.data == target:
curr.next = curr.next.next
return
curr = curr.next
```
其中,target表示要删除的目标元素。curr表示当前遍历到的节点,初始时指向头结点。while循环遍历链表,判断当前节点的下一个节点是否为要删除的目标节点。如果是,则将当前节点的next指针指向目标节点的下一个节点,即完成删除操作。
综上,通过以上三个函数可以实现单链表的查询、插入和删除操作。需要注意的是,需要先定义节点类Node,并在head节点的初始化中创建一个空节点。
阅读全文