(1)不带头结点的单链表运算 问题描述:创建一个不带头结点的单链表,并在该单链表中完成数据元素的查找、插入、删除和销毁等操作;
时间: 2024-05-29 09:13:09 浏览: 88
创建不带头结点的单链表可以直接定义一个指向第一个节点的指针,初始化为NULL。以下是相关操作的具体实现:
1. 数据元素的查找:
遍历单链表,找到第一个值为key的节点并返回该节点的指针。如果没有找到,则返回NULL。
Node* find(Node* head, int key) {
Node* p = head;
while (p != NULL && p->data != key) {
p = p->next;
}
return p;
}
2. 数据元素的插入:
在单链表中插入一个值为key的节点,插入位置为第pos个节点之后。如果pos的值大于单链表的长度,则插入到单链表的末尾。
void insert(Node* &head, int key, int pos) {
Node* p = head;
int i = 1;
while (p != NULL && i < pos) {
p = p->next;
i++;
}
Node* q = new Node;
q->data = key;
q->next = p->next;
p->next = q;
}
3. 数据元素的删除:
删除单链表中第pos个节点,如果pos的值大于单链表的长度,则删除最后一个节点。
void del(Node* &head, int pos) {
if (head == NULL) {
return;
}
Node* p = head;
Node* q = NULL;
int i = 1;
while (p->next != NULL && i < pos) {
q = p;
p = p->next;
i++;
}
if (i == pos) {
if (q == NULL) {
head = head->next;
} else {
q->next = p->next;
}
delete p;
}
}
4. 单链表的销毁:
销毁单链表,释放所有节点的内存空间。
void destroy(Node* &head) {
Node* p = head;
while (p != NULL) {
Node* q = p;
p = p->next;
delete q;
}
head = NULL;
}
阅读全文