用C语言创建带头结点的单链表
时间: 2023-04-11 14:00:52 浏览: 102
可以回答这个问题。创建带头结点的单链表可以按照以下步骤进行:
1. 定义结构体Node,包含数据域和指针域。
2. 定义头结点head,初始化为NULL。
3. 定义指针变量p,用于遍历链表。
4. 插入节点时,先创建一个新节点,将数据存入其中。
5. 将新节点的指针域指向头结点的下一个节点,再将头结点的指针域指向新节点。
这样就创建了一个带头结点的单链表。
相关问题
用C语言写一个带头结点单链表
C语言写一个带头结点的单链表,需要先定义一个结构体来存储每一个结点的数据。一般的结构体定义如下:
```
struct Node {
int data;
struct Node *next;
};
```
然后,需要定义一个指针变量来指向链表的头结点:
```
struct Node *head = NULL;
```
最后,可以实现一些基本的操作,如插入、删除、查询等。例如,插入操作如下:
```
void insert(int value) {
struct Node *new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = value;
new_node->next = head;
head = new_node;
}
```
带头结点的单链表有很多应用,在实际开发中会经常用到。带头结点的单链表比不带头结点的链表更加方便和实用,同时也更加容易实现。
用c语言建立带头结点的单链表
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node, *LinkedList;
// 初始化链表
LinkedList initLinkedList() {
LinkedList head = (LinkedList)malloc(sizeof(Node));
head->next = NULL;
return head;
}
// 插入节点,将新节点插入到链表的第i个位置
void insertNode(LinkedList head, int i, int data) {
Node *p = head;
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
// 找到第i个节点的前一个节点
int j = 0;
while (p && j < i - 1) {
p = p->next;
j++;
}
// 插入新节点
if (p) {
newNode->next = p->next;
p->next = newNode;
}
}
// 删除节点,删除链表的第i个节点
void deleteNode(LinkedList head, int i) {
Node *p = head;
Node *q;
// 找到第i个节点和它的前一个节点
int j = 0;
while (p->next && j < i - 1) {
p = p->next;
j++;
}
// 删除第i个节点
if (p->next) {
q = p->next;
p->next = q->next;
free(q);
}
}
// 遍历链表
void traverseLinkedList(LinkedList head) {
Node *p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkedList head = initLinkedList();
// 插入节点
insertNode(head, 1, 10);
insertNode(head, 2, 20);
insertNode(head, 3, 30);
// 遍历链表
traverseLinkedList(head);
// 删除节点
deleteNode(head, 2);
// 遍历链表
traverseLinkedList(head);
return 0;
}
```