c++单链表创建新节点
时间: 2024-12-23 13:13:53 浏览: 5
在C++中,创建一个新的链表节点通常需要以下几个步骤:
1. 定义结构体或类:首先,你需要定义一个包含数据域和指针域的结构体或类。例如,如果你的链表节点存储整数,你可以定义这样的结构:
```cpp
struct Node {
int data; // 数据域
Node* next; // 指向下一个节点的指针
};
```
2. 创建新节点函数:然后,你可以编写一个静态工厂函数或者成员函数来动态地创建新的节点:
```cpp
Node* createNewNode(int value) {
Node* newNode = new Node(); // 分配内存
if (newNode != nullptr) { // 检查分配是否成功
newNode->data = value;
newNode->next = nullptr; // 初始化新节点的next指针为空
}
return newNode;
}
```
这个函数接受一个整数值并将其放入新节点的数据域,然后将next指针设置为nullptr,表示这是一个新的开始。
相关问题
c++单链表创建一个学生的姓名和身高
在C++中,我们可以创建一个简单的单链表结构来存储学生的信息,如姓名和身高。首先,我们需要定义一个节点类`StudentNode`,它包含姓名和身高的属性,以及指向下一个节点的指针。然后创建一个链表头指针`Head`。下面是一个基本的示例:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
class StudentNode {
public:
string name;
double height; // 身高以米为单位
StudentNode* next; // 指向下一个节点
// 构造函数
StudentNode(string n, double h) : name(n), height(h), next(nullptr) {}
};
// 链表类
class StudentList {
private:
StudentNode* Head;
public:
// 初始化链表为空
StudentList() { Head = nullptr; }
// 添加新学生到链表末尾
void addStudent(string name, double height) {
if (Head == nullptr) {
Head = new StudentNode(name, height);
} else {
StudentNode* current = Head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new StudentNode(name, height);
}
}
// 打印链表中的所有学生信息
void printStudents() {
if (Head == nullptr) {
cout << "链表为空" << endl;
} else {
StudentNode* temp = Head;
while (temp != nullptr) {
cout << "姓名:" << temp->name << ", 身高:" << temp->height << "m" << endl;
temp = temp->next;
}
}
}
};
int main() {
StudentList studentList;
studentList.addStudent("张三", 1.75); // 添加一个学生
studentList.addStudent("李四", 1.80); // 添加另一个学生
studentList.printStudents(); // 打印链表中的所有学生信息
return 0;
}
```
C++实现单链表删除重复节点
以下是 C 实现单链表删除重复节点的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建链表
Node *createList(int arr[], int n) {
Node *head = NULL, *p = NULL;
for (int i = 0; i < n; i++) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = arr[i];
node->next = NULL;
if (head == NULL) {
head = node;
p = node;
} else {
p->next = node;
p = node;
}
}
return head;
}
// 删除重复节点
void deleteDuplicate(Node *head) {
Node *p = head, *q = NULL, *r = NULL;
while (p != NULL) {
q = p->next;
r = p;
while (q != NULL) {
if (q->data == p->data) {
r->next = q->next;
free(q);
q = r->next;
} else {
r = q;
q = q->next;
}
}
p = p->next;
}
}
// 打印链表
void printList(Node *head) {
Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 2, 4, 4, 5};
int n = sizeof(arr) / sizeof(int);
Node *head = createList(arr, n);
printf("原链表:");
printList(head);
deleteDuplicate(head);
printf("删除重复节点后的链表:");
printList(head);
return 0;
}
```
希望能对您有所帮助!
阅读全文