void LinkedList::insert(int pos, int val) { if (pos < 0 || pos > length) { cout << "位置不合法!" << endl; return; } if (length >= MAX_SIZE) { cout << "链表已满!" << endl; return; } for (int i = length; i > pos; i--) { // 将pos及之后的节点后移一位 nodes[i].data = nodes[i - 1].data; nodes[i].next = nodes[i - 1].next; } nodes[pos].data = val; // 在pos位置插入新节点 if (pos == 0) { // 如果插入头节点,修改头指针 head = length; } else { // 修改前一个节点的next指针 nodes[pos - 1].next = length; } nodes[length].next = pos + 1; // 新节点的next指针指向pos+1 length++; // 链表长度+1 }
时间: 2023-06-19 08:09:38 浏览: 125
这是一个链表的插入操作,具体来说,可以分为以下几个步骤:
1. 判断插入位置是否合法,如果不合法直接返回。
2. 判断链表是否已满,如果已满直接返回。
3. 将 pos 及之后的节点后移一位,为新节点腾出位置。
4. 在 pos 位置插入新节点,同时修改前一个节点的 next 指针和头指针。
5. 新节点的 next 指针指向 pos+1。
6. 链表长度+1。
需要注意的是,这里的链表是使用数组实现的,数组中每个元素都是链表中的一个节点,每个节点包含一个数据域和一个指针域,指向下一个节点。同时,还有一个头指针指向链表的头结点。
相关问题
c++实现:请尝试用模版实现单链表。 包含的函数: void append(T val); // 链尾增加一个元素 void insertElement(int pos, int val); // 在指定位置val后添加一个元素 void deleteElement(T val); // 删除所有值为val的元素 void travalList()const; // 从头节点遍历输出链表
下面是使用模板实现的单链表的代码:
```c
#include <iostream>
using namespace std;
template<typename T>
class Node {
public:
T data;
Node<T>* next;
Node(T data) {
this->data = data;
this->next = NULL;
}
};
template<typename T>
class LinkedList {
private:
Node<T>* head;
public:
LinkedList() {
head = NULL;
}
void append(T val) {
Node<T>* newNode = new Node<T>(val);
if (head == NULL) {
head = newNode;
}
else {
Node<T>* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
void insertElement(int pos, int val) {
Node<T>* newNode = new Node<T>(val);
if (pos == 0) {
newNode->next = head;
head = newNode;
}
else {
Node<T>* temp = head;
for (int i = 0; i < pos - 1; i++) {
temp = temp->next;
}
newNode->next = temp->next;
temp->next = newNode;
}
}
void deleteElement(T val) {
Node<T>* temp = head;
Node<T>* prev = NULL;
while (temp != NULL && temp->data == val) {
head = temp->next;
delete temp;
temp = head;
}
while (temp != NULL) {
while (temp != NULL && temp->data != val) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
return;
}
prev->next = temp->next;
delete temp;
temp = prev->next;
}
}
void travalList() const {
Node<T>* temp = head;
while (temp != NULL) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
};
int main() {
LinkedList<int> list;
list.append(1);
list.append(2);
list.append(3);
list.travalList();
list.insertElement(1, 4);
list.travalList();
list.deleteElement(2);
list.travalList();
return 0;
}
```
这里使用了两个模板类,Node用于定义链表节点,LinkedList用于定义链表。其中,append函数用于在链表尾部添加元素,insertElement函数用于在指定位置后添加一个元素,deleteElement函数用于删除所有值为val的元素,travalList函数用于遍历链表并输出链表元素。
阅读全文