理念听得差不多明白了,但实现起来感觉好难,老师在上面写代码的时候一蹴而就,我自己尝试的时候一窍不通,下课花了好久才写出差不多的代码,大家有什么好方法吗?球球了(>_<)
附上了写的链表代码,也欢迎大家提改进建议
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct code
{
int data;
struct code* next;
};
struct code* create()
{
struct code* head = NULL, * p1 = NULL, * p2 = NULL;
while (1)
{
p1 = (struct code*)malloc(sizeof(struct code));
scanf("%d", &p1->data);
if (p1->data == 0)
{
break;
}
if (head == NULL)
{
head = p2 = p1;
}
else
{
p2->next = p1;
p2 = p1;
}
}
if (p2)
{
p2->next = NULL;
}
return head;
}
void print(struct code* head)
{
struct code* p = head;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
struct code* add(struct code* head, struct code* pn)
{
struct code* p1 = head, * p2 = head;
if (head == NULL)
{
head = pn;
pn->next = NULL;
return head;
}
while ((pn->data > p1->data) && (p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if (pn->data <= p1->data)
{
if (p1 == head)
{
pn->next = head;
head = pn;
}
else
{
p2->next = pn;
pn->next = p1;
}
}
else
{
pn->next = NULL;
p1->next = pn;
}
return head;
}
struct code* delete(struct code* head, struct code* pm)
{
struct code* p1 = head,* p2 = head;
if (head == NULL)
{
return head;
}
if (pm->data == head->data)
{
head = head->next;
free(p1);
return head;
}
while ((p1->data != pm->data) && (p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if (p1->data == pm->data)
{
p2->next = p1->next;
free(p1);
}
return head;
}
int main()
{
struct code* head = NULL, * pn = NULL, * pm = NULL;
head = create();
print(head);
pn = (struct code*)malloc(sizeof(struct code));
scanf("%d", &pn->data);
head = add(head, pn);
print(head);
pm = (struct code*)malloc(sizeof(struct code));
scanf("%d", &pm->data);
head = delete(head, pm);
print(head);
return 0;
}
标签:head,p1,struct,好难,next,链表,code,学了,data
From: https://blog.csdn.net/2401_86986599/article/details/143175967