1. /*求一个节点的前驱、代码如下*/
    2. #include<stdio.h>
    3. #include<malloc.h>
    4. typedef struct node /*定义结点的存储结构*/
    5. {
    6. int data;
    7. struct node *next;
    8. }NODE;
    9. NODE *create_circular() /*此函数采用后插入方式建立单向循环链表,并返回一个指向链表表头的指针*/
    10. {
    11. NODE *head,*q,*p; /*定义指针变量*/
    12. int a,n;
    13. head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/
    14. q=head;
    15. printf("\nInput number of the list: ");
    16. scanf("%d",&n); /*输入单向链表结点个数*/
    17. head->data=n; /*表头结点赋值n,即表中结点个数*/
    18. if(n>0) /*若n<=0,建立仅含表头结点的空表*/
    19. {
    20. printf("Input the list :");
    21. while(n>0)
    22. {
    23. scanf("%d",&a); /*输入新元素*/
    24. p=(NODE*)malloc(sizeof(NODE));
    25. p->data=a;
    26. q->next=p;
    27. q=p;
    28. n--;
    29. }
    30. }
    31. q->next=head;
    32. return(head); /*返回表头指针head*/
    33. }
    34. NODE *prior(NODE *p)
    35. {
    36. NODE *q;
    37. q=p->next;
    38. while(q->next!=p)
    39. q=q->next;
    40. return(q);
    41. }
    42. main() /*主程序*/
    43. {
    44. NODE *a,*c,*p;
    45. int i,j;
    46. a=create_circular(); /*建立单向循环链表*/
    47. printf("Input j:"); /*给出单向循环链表中的结点序号,表头结点序号为0*/
    48. scanf("%d",&j); /*j的取值为:0~表中的结点个数*/
    49. p=a;
    50. for(i=0;i<j;i++)
    51. p=p->next; /*按序号确定一个p结点*/
    52. c=prior(p);
    53. printf("prior of %d is : %d",p->data,c->data);
    54. }