任务1:单链表的基础操作 用菜单方式实现:(1)分别用头插法和尾插法方式创建一个单链表;(2)插入一个元素到某位置;(3)根据位置查找元素;(4)根据元素查找位置;(5)输出单链表。
时间: 2024-09-27 17:06:38 浏览: 38
单链表的基本操作(实验)
任务1:单链表的基础操作可以通过以下步骤实现:
1. **头插法创建单链表**:首先,定义一个节点结构体,包含数据域和指向下一个节点的指针。然后,创建一个空链表,如果需要添加第一个节点,可以设置它的next指针为空。接着,对于后续元素,创建一个新的节点,将新节点的数据设置为要添加的值,其next指针指向当前链表的头部。
```c++
struct Node {
int data;
Node* next;
};
void insertAtStart(Node*& head, int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = head;
head = newNode;
}
```
2. **尾插法创建单链表**:同样定义节点,但在添加最后一个节点时,直接将新节点的next指针设为 nullptr,然后将其放在现有链表的尾部。
```c++
void insertAtEnd(Node*& head, int value) {
if (head == nullptr) {
head = new Node{value, nullptr};
return;
}
Node* current = head;
while (current->next != nullptr)
current = current->next;
current->next = new Node{value, nullptr};
}
```
3. **插入一个元素到指定位置**:遍历链表找到目标位置,然后插入新的节点。
```c++
void insertNodeAtPosition(Node*& head, int value, int position) {
Node* newNode = new Node{value};
if (position == 0) {
newNode->next = head;
head = newNode;
} else {
Node* prev = head;
for (int i = 0; i < position - 1 && prev != nullptr; ++i)
prev = prev->next;
if (prev != nullptr)
newNode->next = prev->next;
prev->next = newNode;
}
}
```
4. **根据位置查找元素**:从头开始遍历链表,找到对应位置的节点。
```c++
Node* searchByPosition(Node* head, int position) {
if (position <= 0)
return nullptr;
Node* current = head;
for (int i = 0; i < position && current != nullptr; ++i)
current = current->next;
return current;
}
```
5. **输出单链表**:递归遍历并打印节点数据。
```c++
void printList(Node* head) {
if (head == nullptr)
return;
cout << head->data << " ";
printList(head->next);
}
```
阅读全文