69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *create_list();
struct ListNode *deletem(struct ListNode *L, int m);
struct ListNode *my_deletem(struct ListNode *L, int m);
void Insertsort(struct ListNode **L);
void printlist(struct ListNode *L)
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(void)
{
int m;
struct ListNode *L = create_list();
printlist(L);
Insertsort(&L);
printlist(L);
printf("Please input your delete number: ");
scanf("%d", &m);
L = deletem(L, m);
printlist(L);
return 0;
}
/* 带哨兵的链表插入排序*/
void Insertsort(struct ListNode **L)
{
struct ListNode *p,*q,*r,*u;
p = (*L)->next;
(*L)->next = NULL;
while(p!=NULL)
{
r = *L;
q = (*L)->next;
while(q !=NULL && q->data <= p->data)
{
r = q;
q = q->next;
}
u=p->next;
p->next=r->next;
r->next=p;
p=u;
}
}
struct ListNode *create_list()
{
struct ListNode *head,*p1,*p2;
int m;
int size = sizeof(struct ListNode);
printf("Input a interge (-1 stop input)\n");
p1 = (struct ListNode*)malloc(size);
scanf("%d", &m);
p1->data = m;
head = NULL;
while (p1->data != -1) {
if(head == NULL)
head = p1;
else
p2->next = p1;
p2 = p1;
scanf("%d", &m);
p1 = (struct ListNode *)malloc(size);
p1->data = m;
}
free(p1);
p2->next = NULL;
return head;
}
struct ListNode *deletem( struct ListNode *L, int m )
{
struct ListNode *ptr, *ptr1;
while( L != NULL && ( L->data == m) )
{
ptr1 = L;
L = L->next;
free(ptr1);
}
if( L == NULL )
return NULL;
ptr = L;
ptr1 = L->next;
while( ptr1 != NULL)
{
if( ptr1->data == m )
{
ptr->next = ptr1->next;
free(ptr1);
}
else
ptr = ptr1;
ptr1 = ptr->next;
}
return L;
}
链表创建,输出和删除某个节点,插入排序(带哨兵的)