1利用链表打印1-10的元素
#include<stdio.h> //定义一个结构体变量 //既存放一个变量,又把首个节点的地址存入,方便之后通过head的地址找其他变量的地址 typedef struct node { int a; struct node* next; }; int main() { struct node head, *p, *q; int i, n; q = &head;//q取首元素地址 for (i = 1; i <= 10; i++)//设置循环 { malloc函数是c语言的函数,指申请一个你需要的变量大小的空间,单位是字节 p = malloc(sizeof(struct node));//空间地址是随机的 p->a = i;//将i的值存入p的a元素里 q->next = p;//将p的地址存入q的next元素里 q = p;再将p的地址覆盖在q上 } p->next = NULL;//设置循环停止条件 p = head.next; while (p != NULL)用while循环打印 { printf("%d ", p->a); p = p->next; } return 0; }
2,将链表的第二位插入一个0;
#include<stdio.h> struct node { int a; node* next; }; int main () { node head,*p,*q; int i,n; q=&head; for(i=1;i<=10;i++) { p=new node; p->a=i; q->next=p; q=p; } p->next=NULL; n=5; p=&head; for(i=0;i<n;i++) p=p->next; q=new node; q->a=0; q->next=p->next; p->next=q; p=head.next; while(p!=NULL) { printf("%d ",p->a); q=p->next; delete p; p=q; } return 0; }
小编是在DEV上写的,因为好像vs中new和delete要c++函数。
效果
3删除第二个元素
struct node { int a; node* next; }; int main () { node head,*p,*q; int i,n; q=&head; for(i=1;i<=10;i++) { p=new node; p->a=i; q->next=p; q=p; } p->next=NULL; n=2; p=&head; for(i=1;i<n;i++) p=p->next; q=p->next; p->next=q->next; p=head.next; delete q; while(p!=NULL) { printf("%d ",p->a); q=p->next; delete p; p=q; } return 0; }
输出效果