cpp 如何新建一个ListNode*类型的链表?
时间: 2023-08-10 13:05:23 浏览: 125
可以通过以下代码来新建一个 `ListNode*` 类型的链表:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* createLinkedList(vector<int> arr) {
if (arr.empty()) {
return NULL;
}
ListNode* dummyHead = new ListNode(0);
ListNode* cur = dummyHead;
for (int i = 0; i < arr.size(); i++) {
cur->next = new ListNode(arr[i]);
cur = cur->next;
}
return dummyHead->next;
}
```
这个方法中,我们通过一个 vector 来存储链表中的值,然后通过循环将值一个一个地插入到链表中。最后返回链表的头结点即可。
相关问题
cpp能否将一个数组[1,1,2,3,3]转换成ListNode*类型链表?
可以将一个数组转换成 `ListNode*` 类型的链表。可以通过以下代码来实现:
```cpp
ListNode* createLinkedList(vector<int>& nums) {
if (nums.empty()) {
return NULL;
}
ListNode* dummyHead = new ListNode(0);
ListNode* cur = dummyHead;
for (int i = 0; i < nums.size(); i++) {
cur->next = new ListNode(nums[i]);
cur = cur->next;
}
return dummyHead->next;
}
```
这个方法中,我们通过一个 `vector` 来存储链表中的值,然后通过循环将值一个一个地插入到链表中。最后返回链表的头结点即可。
例如,对于数组 `[1,1,2,3,3]`,可以使用以下代码来将其转换成 `ListNode*` 类型的链表:
```cpp
vector<int> nums{1, 1, 2, 3, 3};
ListNode* head = createLinkedList(nums);
```
这样就可以得到一个链表,其头结点为 `1->1->2->3->3->NULL`。注意,这里需要先定义一个 `ListNode` 结构体,代码如下:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
```
该函数用于反转整个链表ListNode*reverseList(ListNode*head)
这个函数的作用是反转给定的单链表。`ListNode*` 是链表节点的数据类型,`head` 参数代表链表的头结点。函数的功能是在不使用额外数据结构的情况下,改变链表节点之间的连接顺序,使得原来的第一个节点变成最后一个,而原来最后一个节点变为新的第一个。
函数的基本思路是使用三个指针:`prev`(前驱)、`current`(当前)和 `next`(后继)。初始时,`prev` 和 `current` 都指向 `NULL`(链表结束标记),`next` 指向 `head`。然后遍历链表,在每次迭代中,将 `current` 的下一个节点赋值给 `current->next`,并将 `current` 自身移动到其原 `next` 节点的位置,直到 `current` 变为 `NULL`。当所有节点处理完毕后,`head` 就指向了反转后的链表的第一个节点。
下面是这个函数的一个简化版伪代码:
```cpp
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* current = head;
ListNode* next = NULL;
while (current != NULL) {
next = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的指向前移
prev = current; // 更新前驱指针
current = next; // 更新当前指针到下一个节点
}
return prev; // 返回新链表的头节点
}
```
阅读全文