(1)输入数据,创建一个单链表; (2)删除单链表第i个元素; (3)删除单链表中所有值为e的元素; (4)输出单链表。
时间: 2023-12-19 22:07:29 浏览: 29
好的,我来回答你的问题。
(1)输入数据,创建一个单链表:
创建单链表需要定义一个结构体来表示链表的节点,包括节点的值和指向下一个节点的指针。然后通过循环输入数据,创建链表。
具体代码如下:
```c++
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* createList() {
ListNode* head = new ListNode(0);
ListNode* p = head;
int n, x;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
ListNode* node = new ListNode(x);
p->next = node;
p = p->next;
}
return head->next;
}
```
(2)删除单链表第i个元素:
删除单链表第i个元素需要先找到第i-1个节点,然后将其指针指向第i+1个节点即可。
具体代码如下:
```c++
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* p = dummy;
ListNode* q = dummy;
for (int i = 0; i < n; i++) {
q = q->next;
}
while (q->next != NULL) {
p = p->next;
q = q->next;
}
ListNode* temp = p->next;
p->next = temp->next;
delete temp;
return dummy->next;
}
```
(3)删除单链表中所有值为e的元素:
删除单链表中所有值为e的元素需要先找到第一个值为e的节点,然后将其前一个节点的指针指向其后一个节点即可。然后继续查找下一个值为e的节点,直到链表末尾。
具体代码如下:
```c++
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* p = dummy;
while (p->next != NULL) {
if (p->next->val == val) {
ListNode* temp = p->next;
p->next = temp->next;
delete temp;
} else {
p = p->next;
}
}
return dummy->next;
}
```
(4)输出单链表:
输出单链表需要循环遍历链表,依次输出每个节点的值即可。
具体代码如下:
```c++
void printList(ListNode* head) {
ListNode* p = head;
while (p != NULL) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
```