单链表的建立,初始化,遍历,插入,删除c语言
时间: 2023-05-22 21:03:07 浏览: 64
如下是单链表的建立,初始化,遍历,插入和删除的C语言代码:
typedef struct node {
int data; //数据域
struct node *next; //指针域
} Node; //定义链表节点
Node *initList() {
Node *head = (Node *) malloc(sizeof(Node)); //建立头节点
head->next = NULL; //头节点的指针域为空
return head;
}
void traverseList(Node *head) {
Node *p; //定义指针p
p = head->next; //让p指向第一个节点
while (p != NULL) { //当p不为空时,输出数据
printf("%d ", p->data);
p = p->next; //p指向下一个节点
}
printf("\n");
}
void insertNode(Node *head, int data, int pos) {
Node *p;
p = head; //初始化指针p为头节点
for (int i = 0; i < pos-1; i++) { //遍历pos-1次,找到要插入的位置
p = p->next;
if (p == NULL) {
printf("插入位置有误!\n");
return;
}
}
Node *newNode = (Node *) malloc(sizeof(Node)); //新建节点
newNode->data = data;
newNode->next = p->next; //新节点的指针域指向当前节点的下一节点
p->next = newNode; //当前节点的指针域指向新节点
}
void deleteNode(Node *head, int pos) {
Node *p, *q;
p = head; //初始化指针p为头节点
for (int i = 0; i < pos-1; i++) { //遍历pos-1次,找到要删除的节点
p = p->next;
if (p == NULL) {
printf("删除位置有误!\n");
return;
}
}
q = p->next; //记录要删除的节点
p->next = q->next; //当前节点的指针域指向要删除节点的下一节点
free(q); //释放要删除的节点
}
int main() {
Node *head = initList();
for (int i = 1; i <= 5; i++) {
insertNode(head, i, i);
}
traverseList(head);
deleteNode(head, 4);
traverseList(head);
return 0;
}