2017-05-02
#include <stdio.h>
#include <malloc.h>
typedef struct Link{
int data;
struct Link *next;
}Node;
Node *deleteNode(Node *head, int d)
{
Node *q=NULL, *p=NULL;
p = head;
if(p==NULL)
{
printf("链表为空! 删除失败!\n");
exit(0);
}
else
{
while(p->next!=NULL && p->data!=d)
{
q = p;
p = p->next;
}
if(p->data == d)
{
if(p==head)
head = p->next;
else
q->next = p->next;
free(p);
}
else
printf("Not found!\n");
}
return head;
}
Node *insertNode(Node *head, int b)
{
Node *q1=NULL, *q2=NULL, *p=NULL;
q1=head;
p = (Node *)malloc(sizeof(Node));
p->data=b;
if(head==NULL)
{
head = p;
p->next=NULL;
}
else if(p->data < q1->data)
{
head = p;
p->next = q1;
}
else
{
while(q1!=NULL && q1->data < p->data)
{
q2 = q1;
q1 = q1->next;
}
p->next = q2->next;
q2->next = p;
}
return head;
}
void traverse(Node *head)
{
Node *p=NULL;
p=head;
do{
printf("%-5d", p->data);
p=p->next;
}while(p!=NULL);
printf("\n");
}
void main()
{
int i=0;
Node *head = NULL;
int a[] = {78, 69, 98, 27, 36};
for(i=0; i<5; i++)
{
head = insertNode(head, a[i]);
}
traverse(head);//遍历有序链表
//在链表中删除节点
deleteNode(head, 69);
traverse(head);//遍历有序链表
//在链表中删除节点
deleteNode(head, 10);
traverse(head);//遍历有序链表
}