欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

不带头结点的链表操作----插入删除打印

程序员文章站 2024-03-21 13:57:34
...
#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
 int data;
 struct list*next;
}List;
List*insert_list_2nd(List*head,int data);
List*insert_list_last(List*head,int data);
List*insert_list_order(List*head,int data);
void print_list(List*head);
List*delete_list(List*head,int value);
int main()
{
 List*head=NULL; 
 int i;
// for(i=0;i<10;i++)
 // head=insert_list_2nd(head,i);
 // head=insert_list_last(head,i);
 for(i=9;i>=0;i--)
  head=insert_list_order(head,i); 
 print_list(head); 
 for(i=0;i<9;i++)
  head=delete_list(head,i);
 print_list(head); 
}
List*insert_list_2nd(List*head,int data)
{
 List*newnode=(List*)malloc(sizeof(List));
 newnode->data=data;
/* if(head==NULL)
 {
  head=newnode;
  newnode->next=NULL; 
 } 
 else
 {
  newnode->next=head;
  head=newnode;
 }*/
 newnode->next=head;
 head=newnode; 
 return head;
}
List*insert_list_last(List*head,int data)
{ List*newnode=(List*)malloc(sizeof(List));
 List*temp=head; 
 newnode->data=data;
 newnode->next=NULL;
 if(head==NULL) return newnode; 
 while(temp->next)
 {
  temp=temp->next; 
 }  
 temp->next=newnode;
 return head;
}
List*insert_list_order(List*head,int data)
{
 List*temp=head;
 List*newnode=(List*)malloc(sizeof(List));
 newnode->data=data;
 newnode->next=NULL;
 if(head==NULL) //链表为空为空 
 {
  return newnode;
 }
 if(head->data>data)//链表第一个节点就是要插入的位置 
 {
  newnode->next=head;
  return newnode;
 }
 while(temp->next && temp->next->data<data)
 {
  temp=temp->next;
 }
/* if(temp->next==NULL)
 {
  temp->next=newnode;
 }   
 else
 {
  newnode->next=temp->next;
  temp->next=newnode;
 }*/
 newnode->next=temp->next;
 temp->next=newnode;
 return head;
}
void print_list(List*head)
{
 while(head)
 {
  printf("%d\n",head->data);
  head=head->next;
 } 
}
List*delete_list(List*head,int value)
{ List*temp;
 List*p;
 if(head==NULL) return NULL;
 if(head->data==value)
 {
  temp=head->next;
  free(head);
  return temp; 
 }
 temp=head;
 while(temp->next && temp->next->data!=value)
 {
  temp=temp->next; 
 }  
 //p=temp->next;
 if(temp->next==NULL)
 {
  printf("no have %d\n",value);
  return head;
 }
 else
 {
  p=temp->next;
  temp->next=temp->next->next;
  free(p);
  return head;
 }
 
}