1.带头结点实现
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}LinkNode,*LinkList;
void reverseonewaycircularlinkedlist(LinkList head)
{
LinkList p,q,r;
p = head->next;//带头结点的单循环链表好处就在于,每次插入都是放在首元素之前。
while(p->next != head)//判断循环结束的条件必须是当前节点的下一个的下一个是不是head
{
//先断待逆置的元素 q
q = p->next;
p->next = q->next;
//再插入到链表首元素之前
q->next = head->next;
head->next = q;
}
//p->next = head;没有必要
p =head;
while(p->next != head)
{
p = p->next;
printf("final%d ",p->data);
}
}
LinkList createonewaycircularlinkedlist(int a[], int n)//头插法建立带头结点的单循环链表
{
LinkList head,p,q;
int i = 0;
head = (LinkList) malloc(sizeof(LinkNode));
head->next = head;
p = head;
if(n > 0)
{
while(i < n)
{
q = (LinkList) malloc (sizeof(LinkNode));
q->data