题解 | #【模板】链表#
【模板】链表
https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f
#include <stdio.h> #include <string.h> #include <stdlib.h> //创建链表头节点 typedef int DataType; typedef struct linknode { /*单链表存储类型*/ DataType data; /*定义结点的数据域*/ struct linknode* Next; /*定义结点的指针域*/ } LinkList; LinkList* InitList() { /*初始化链表函数*/ LinkList* head; head = (LinkList*)malloc(sizeof(LinkList)); /*动态分配一个结点空间*/ head->Next = NULL; return head; /*头结点L指针域为空,表示空链表*/ } void CreateListL(LinkList* head, int n) { /*建立链表函数*/ LinkList* s; s = (LinkList*) malloc(sizeof(LinkList)); /*生成新结点*/ s->data = n; s->Next = NULL; /*将新结点的指针域为空*/ head->Next = s; } //插入操作 void Insert(LinkList* head, int target, int value) { //把p 指向头节点遍历 LinkList* p = head; //插入的数分配内存空间 LinkList* NewCode = (LinkList*) malloc(sizeof(LinkList)); NewCode->data = value; NewCode->Next = NULL; //链表为空直接返回 if (p->Next == NULL) { CreateListL(p, value); } else { //确保p还没有遍历到链表尾,找到要插入元素的位置 while ( p->Next != NULL && p->Next->data != target) { p = p->Next; } //找到了要插入的元素 if (p->Next != NULL) { //插入元素 NewCode->Next = p->Next; p->Next = NewCode;//放入前面 //未找到元素 } else { p->Next = NewCode;//链表尾 } } } LinkList* Delete(LinkList* head, int value) { LinkList* p = head; if (head == NULL) { return NULL; } while (p->Next != NULL && p->Next->data != value) { p = p->Next; } if (p->Next != NULL) { LinkList* temp = p->Next; p->Next = temp->Next; free(temp); } return head; } //将链表元素输出 void printLinkedList(LinkList* head) { //判断是否为空 //头指针的Next指针为空,表示整个链表为空,无法进行遍历和输出操作 if (head->Next == NULL) { printf("NULL"); return; } LinkList* p = head; p = p->Next; while (p != NULL) { printf("%d ", p->data); p = p->Next; } } int main() { LinkList* head; head = InitList(); int target, value, data; int x, i; //操作次数 char ch[100000]; scanf("%d", &x); for (i = 0; i < x; i++) { scanf("%s", ch); if (strcmp(ch, "insert") == 0) { scanf("%d", &target); scanf("%d", &value); Insert( head, target, value); } else if (strcmp(ch, "delete") == 0) { scanf("%d", &data); //更新头指针 head = Delete(head, data); } } printLinkedList(head); return 0; }