好程序员训练营
<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>
------我的c语言笔记,期待与您交流!
#include<stdio.h>
#include<stdlib.h>
typedef struct list_t{
int value;
struct list_t *next;
}node;
node *creat(); //建立单向链表
node *del(node *head,int num); //单链表删除节点
node *reverse(node *head); //单链表逆置
void free_p(node *head); //释放单链表分配的空间
int main()
{
node *head = 0; //有时候记得要初始化指针
head = creat();
print(head);
printf("\n");
free_p(head);
print(head);
}
node *creat()
{
node *head, *p, *s;
int x, cycle = 1;
head = (node*)malloc(sizeof(node));
p = head;
while (cycle)
{
printf("please input the data : ");
scanf_s("%d\n", &x);
if (x != 0) //链表以0结尾
{
s = (node*)malloc(sizeof(node));
s->value = x;
printf("%d\n", s->value);
p->next = s;
p = s;
}
else cycle = 0;
}
head = head->next;
p->next = NULL;
return head;
}
int length(node *head)
{
int n=0;
node *p;
p=head;
while(p!=NULL)
{
p=p->next;
n++;
}
return(n);
}
node *del(node *head, int num)
{
node *p1, *p2=0;
p1 = head;
while (num != p1->value && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (num == p1->value)
if (p1==head)
{
head = p1->next;
free(p1);
}
else
{
p2->next = p1->next;
}
else
printf("\n %d could not be found", num);
return head;
}
node *reverse(node *head)
{
if (head == NULL || head->next == NULL)
{
return head;
}
node *reversehead = NULL;
node *p_curr = head;
node *p_prev = NULL;
while (p_curr != NULL)
{
node *p_next = p_curr->next;
if (p_curr == NULL)
reversehead = p_curr;
p_curr->next = p_prev;
p_prev = p_curr;
p_curr = p_next;
}
reversehead = p_prev;
return reversehead;
}
void print(node *head)
{
node *p;
p = head;
while (p != NULL)
{
printf("%d", p->value);
p = p->next;
}
}
void free_p(node *head)
{
node *p, *next;
p = head;
while (p != NULL)
{
next = p->next;
free(p);
p = next;
}
}
转载于:https://blog.51cto.com/christmas/1620202