此代码是在不通过头接点的情况下删除已知节点的前驱,就需要用到循环链表,而循环链表就需要用尾指针指向头节点,即当指向NULL时改为指向head
图:
代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node * pNext;
}NODE,*PNODE; //NODE等价于struct Node,PNODE等价于struct Node *
//函数声明
PNODE create_list(void);
void traverse_list(PNODE pHead);
int length_list(PNODE pHead);
bool delete_is(PNODE,int,int *);
int main(void)
{
int val,pos;
PNODE pHead;
pHead = create_list();//create_list()创建一个非循环的单链表,并将链表的头节点付给pHead;
traverse_list(pHead);//遍历所有的节点
printf("即将进行删除操作,删除为pos的前一个节点,请输入pos=");
scanf("%d",&pos);
if(delete_is(pHead,pos,&val))
{
printf("删除成功,您删除的元素是=%d\n