p是要删除的结点,q是p的前一个结点 q-next = p-next;//删除的结点的后一结点的首地址赋值给删除的结点的前一结点的next p-next-prior = q;//删除的结点的后一结点的prior指向删除的结点的前一结点的首地址
typedef int Elemtype;
typedef int status;
#define OK 1
#define ERROR -1
#include "stdio.h"
#include "stdlib.h"
typedef struct LNode {
Elemtype data;
struct LNode *next;
}*linklist;
//构造链表
void Create_Linklist(linklist L)
{
linklist p;
p=(linklist)malloc(sizeof(LNode));
if(!p)
exit(OVERFLOW);
L=p;
L-next =NULL;
}
//节点插入
void Insert_Linklist(linklist L)
int n,i;
printf("请输入插入节点的个数n: ");
scanf("%d",n);
getchar();
for(i=n;i0;i--)
p=(linklist )malloc(sizeof(LNode));
scanf("%d",p-data);
p-next=L-next ;
L-next =p;
//遍历输出并输出长度
status Visit_linklist(linklist L)
int i=1;
p=L-next ;
if(L-next==NULL)
return ERROR;
while(p-next !=NULL)
printf("%d ",p-data );
p=p-next ;
i++;
printf("%d\n",p-data );
printf("长度为:%d\n",i);
return OK;
//查找值为x的直接前驱结点q并输出
void Search_linklist(linklist L)
int x,k=0;
linklist p=L,q;
printf("输入x: ");
scanf("%d",x);
if(L-next ==NULL)
printf("该表为空 !\n");
while(p-next!=NULL)
q=p;
if(p-next -data ==x)
printf("%d ",q-data );
k=1;
if(p-next p-data ==x)
if(k==0)
printf("未找到值为%d的结点\n",x);
printf("\n");
//删除节点
status Delete_linklist(linklist L)
linklist p,q;
int k=0,x;
printf("请输入删除节点的值x: ");
p=L;
q=L-next ;
while(q!=NULL)
if(q-data ==x)
p=q ;
p-next =q-next ;
free(q);
q=p-next ;
else
printf("表中没有值为%d的结点!\n",x);
//链表逆置
void ListInverse_linkliast(linklist L)
linklist k,p,q;
while (p-next !=NULL)
k=p;
while (L-next !=p)
L-next = q-next ;
k-next =q;
//链表奇偶分解
void Break_linklist (linklist La,linklist Lb)
p=La-next;
q=Lb;
q-next =p;
q=q-next ;
//主菜单
void main()
printf(" (1) 建立带头节点的单链表\n");
int choice;
printf(" 请输入选择:");
while(scanf("%d",choice))
printf("\n\n");
switch(choice)
case 1:
Create_Linklist(L1);
break;
Insert_Linklist(L1);
Visit_linklist(L1);
Search_linklist(L1);
Delete_linklist(L1);
ListInverse_linkliast(L1);
default:
printf(" 输入有误!");
首先实现一个单链表,代码如下:
#include iostream
#include stdio.h
#include string.h
#include conio.h
typedef struct student
int data;
struct student *next;
}node;
node *creat()
node *head,*p,*s;
int x,cycle=1;
head=(node *)malloc(sizeof(node));
p=head;
while(cycle)
printf("\nplease input the data: ");
if(x!=0)
s=(node *)malloc(sizeof(node));
s-data=x;
printf("\n %d",s-data);
p-next=s;
p=s;
else cycle=0;
head=head-next;
p-next=NULL;
printf("\n yyy %d",head-data);
return(head);
然后增加一个函数对表中的元素逆置,实现如下:
node *reverse(node *head)
if (head == NULL || head-next == NULL)
return head;
head-next = NULL;
head = p1;
以上就是土嘎嘎小编为大家整理的php实现一个单链表相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!