实验步骤1、定义节点2、生成一个单链表(正序建立单链表或逆序建立单链表)3、单链表中插入一个元素4、在单链表中删除一个元素5、按序号查找一个元素6、按值(关键字)查找一个元素7、显示单链表所有元素
时间: 2023-10-13 14:23:41 浏览: 164
单链表的建立、插入节点、删除节点、逆序、查找等等
3星 · 编辑精心推荐
好的,下面我来为你介绍单链表的实验步骤:
1. 定义节点
单链表是由多个节点组成的,因此我们首先需要定义一个节点的结构体,例如:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
```
其中,`val` 表示节点的值,`next` 表示指向下一个节点的指针。
2. 生成一个单链表
可以正序或逆序建立单链表。正序建立单链表时,从头结点开始,依次插入新节点;逆序建立单链表时,从尾结点开始,依次插入新节点。例如,下面是一个正序建立单链表的示例:
```
ListNode* createList(vector<int>& nums) {
ListNode *dummy = new ListNode(0); // 头结点
ListNode *cur = dummy;
for (int i = 0; i < nums.size(); i++) {
ListNode *node = new ListNode(nums[i]);
cur->next = node;
cur = cur->next;
}
return dummy->next;
}
```
其中,`nums` 表示要插入的节点的值。
3. 单链表中插入一个元素
插入一个元素需要找到插入位置的前一个节点,然后将新节点插入到其后面。例如,下面是在单链表中插入一个元素的示例:
```
void insertNode(ListNode *head, int val) {
ListNode *node = new ListNode(val);
node->next = head->next;
head->next = node;
}
```
其中,`head` 表示单链表的头结点,`val` 表示要插入的节点的值。
4. 在单链表中删除一个元素
删除一个元素需要找到要删除节点的前一个节点,然后将其指针指向要删除节点的下一个节点。例如,下面是在单链表中删除一个元素的示例:
```
void deleteNode(ListNode *head, int val) {
ListNode *prev = head;
ListNode *cur = head->next;
while (cur != NULL) {
if (cur->val == val) {
prev->next = cur->next;
delete cur;
break;
}
prev = cur;
cur = cur->next;
}
}
```
其中,`head` 表示单链表的头结点,`val` 表示要删除的节点的值。
5. 按序号查找一个元素
按序号查找一个元素需要遍历单链表,直到找到第 `k` 个节点。例如,下面是按序号查找一个元素的示例:
```
ListNode* findKthNode(ListNode *head, int k) {
int i = 0;
ListNode *cur = head->next;
while (cur != NULL && i < k) {
cur = cur->next;
i++;
}
return cur;
}
```
其中,`head` 表示单链表的头结点,`k` 表示要查找的节点的序号。
6. 按值(关键字)查找一个元素
按值查找一个元素需要遍历单链表,直到找到值为 `val` 的节点。例如,下面是按值查找一个元素的示例:
```
ListNode* findNode(ListNode *head, int val) {
ListNode *cur = head->next;
while (cur != NULL) {
if (cur->val == val) {
return cur;
}
cur = cur->next;
}
return NULL;
}
```
其中,`head` 表示单链表的头结点,`val` 表示要查找的节点的值。
7. 显示单链表所有元素
显示单链表所有元素需要遍历单链表,依次输出每个节点的值。例如,下面是显示单链表所有元素的示例:
```
void printList(ListNode *head) {
ListNode *cur = head->next;
while (cur != NULL) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
}
```
其中,`head` 表示单链表的头结点。
阅读全文