建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按头插入法来建立相应单链表。在第i个位置插入(个人学号)和删除元素。
时间: 2024-05-05 14:15:03 浏览: 97
表结点由三个域组成标志域、指示表头的指针-数据结构经典讲义
```cpp
#include <iostream>
using namespace std;
//定义链表结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(NULL) {}
};
//头插法建立链表
ListNode* createList() {
ListNode* head = new ListNode(0);
int x;
while (cin >> x) {
ListNode* newNode = new ListNode(x);
newNode->next = head->next;
head->next = newNode;
}
return head;
}
//打印链表
void printList(ListNode* head) {
ListNode* p = head->next;
while (p) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
//在第i个位置插入元素
void insertNode(ListNode* head, int i, int x) {
ListNode* p = head;
while (i > 0) {
p = p->next;
i--;
}
ListNode* newNode = new ListNode(x);
newNode->next = p->next;
p->next = newNode;
}
//删除第i个位置的元素
void deleteNode(ListNode* head, int i) {
ListNode* p = head;
while (i > 1) {
p = p->next;
i--;
}
ListNode* q = p->next;
p->next = q->next;
delete q;
}
int main() {
ListNode* head = createList();
printList(head);
insertNode(head, 3, 123);
printList(head);
deleteNode(head, 2);
printList(head);
return 0;
}
```
阅读全文