链表操作:
初始化--->(1)含有头节点;(2)不含头节点。
插入----->必须先找到插入节点前的一个节点,用p指向此节点,用q表示待插入节点;q申请后就对其进行操作,即q->next=p->next,p->next=pr;
删除----->和插入一样,必须先找到删除节点前的一个节点,用p指向此节点,用q表示待删除节点;先用前一个节点表示出待删除节点,即q=p->next;然后对前一个节点进行操作,p->next=q->next,free(q);
注:无论是插入,还是删除,都需要用一个新变量来表示待插入、删除(摧毁)节点。删除需要判断链表是否为空。
1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef int datatype; 4 typedef struct snode 5 { 6 datatype data; 7 struct snode *next; 8 }Node; 9 int Insert(Node *head,int pos,datatype x) 10 { 11 Node *p=head,*q=NULL; 12 int i=0; 13 while (p->next!=NULL && i<pos-1) 14 { 15 p=p->next; 16 i++; 17 } 18 if (p!=NULL && i==pos-1) 19 { 20 if((q=(Node *)malloc(sizeof(Node)))!=NULL) 21 { 22 q->data=x; 23 q->next=p->next; 24 p->next=q; 25 } 26 return 1; 27 } 28 else 29 { 30 printf("error\n"); 31 return 0; 32 } 33 } 34 void del(Node *head,int pos,datatype *x) 35 { 36 Node *p=head,*q=NULL; 37 int i=0; 38 while (p->next!=NULL && i<pos-1) 39 { 40 p=p->next; 41 i++; 42 } 43 if (p!=NULL && i==pos-1) 44 { 45 q=p->next; 46 *x=q->data; 47 p->next=q->next; 48 free(q); 49 } 50 } 51 void des(Node *head) 52 { 53 Node *p=head,*s=NULL; 54 while (p) 55 { 56 s=p; 57 p=p->next; 58 free(s); 59 } 60 } 61 int main() 62 { 63 Node head; 64 datatype x; 65 head.next=NULL; 66 return 0; 67 }