利用L1,不能创建新链表
时间: 2023-05-31 14:01:35 浏览: 42
若要删除链表中值为val的节点,可以使用双指针(快慢指针)遍历链表,若慢指针指向的节点的值等于val,则删除该节点,将前一个节点的next指向后一个节点,即跳过该节点。代码如下:
```
ListNode* removeElements(ListNode* head, int val) {
while (head != nullptr && head->val == val) {
head = head->next;
}
if (head == nullptr) {
return nullptr;
}
ListNode* slow = head;
ListNode* fast = head->next;
while (fast != nullptr) {
if (fast->val == val) {
slow->next = fast->next;
} else {
slow = slow->next;
}
fast = fast->next;
}
return head;
}
```
相关问题
不事先给定链表长度创建链表
创建不事先给定链表长度的链表,可以采用如下方法:
1. 创建一个头节点,即初始化一个链表。
2. 使用一个循环,在每次循环中向链表中添加一个新节点,直到用户输入停止标志或者其他特定条件满足为止。
3. 在每次循环中,首先询问用户要输入的节点的数据值,然后创建一个新节点并将数据值存储在新节点中。
4. 将新节点插入到链表的尾部,即将新节点连接到链表的最后一个节点之后。
5. 当用户输入停止标志或者特定条件满足时,循环结束。
不给定链表长度来创建链表
不给定链表长度时,我们可以通过用户不断输入节点的值来动态创建链表。具体实现方法如下:
1. 定义一个链表节点结构体,包含节点值和指向下一个节点的指针。
2. 定义一个头节点指针,初始化为NULL。
3. 通过循环读入用户输入的节点值,每次创建一个新的节点,并把节点值存入新节点中。
4. 将新节点插入到链表中。如果链表为空,则把新节点作为头节点;否则,从头节点开始遍历链表,找到最后一个节点,将其next指针指向新节点。
5. 当用户输入结束时,返回头节点指针即可。
以下是一个简单的C++代码示例:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* createList() {
int val;
ListNode *head = NULL, *cur = NULL;
while (cin >> val) {
ListNode* node = new ListNode(val);
if (!head) {
head = node;
cur = head;
} else {
cur->next = node;
cur = cur->next;
}
}
return head;
}
int main() {
ListNode* head = createList();
// do something with the list
return 0;
}
```