/*求一个节点的前驱、代码如下*/ #include<stdio.h>#include<malloc.h>typedef struct node /*定义结点的存储结构*/{ int data; struct node *next;}NODE;NODE *create_circular() /*此函数采用后插入方式建立单向循环链表,并返回一个指向链表表头的指针*/{ NODE *head,*q,*p; /*定义指针变量*/ int a,n; head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/ q=head; printf("\nInput number of the list: "); scanf("%d",&n); /*输入单向链表结点个数*/ head->data=n; /*表头结点赋值n,即表中结点个数*/ if(n>0) /*若n<=0,建立仅含表头结点的空表*/ { printf("Input the list :"); while(n>0) { scanf("%d",&a); /*输入新元素*/ p=(NODE*)malloc(sizeof(NODE)); p->data=a; q->next=p; q=p; n--; } } q->next=head; return(head); /*返回表头指针head*/}NODE *prior(NODE *p){ NODE *q; q=p->next; while(q->next!=p) q=q->next; return(q);}main() /*主程序*/{ NODE *a,*c,*p; int i,j; a=create_circular(); /*建立单向循环链表*/ printf("Input j:"); /*给出单向循环链表中的结点序号,表头结点序号为0*/ scanf("%d",&j); /*j的取值为:0~表中的结点个数*/ p=a; for(i=0;i<j;i++) p=p->next; /*按序号确定一个p结点*/ c=prior(p); printf("prior of %d is : %d",p->data,c->data);}