求助!链表向后循环2位如何算?
#include <stdio.h>
#include <stdlib.h>
#define VALUE int
#define DIR char
typedef struct B { //创建一个向量的结构体
VALUE Value;
DIR Dir;
}VectorQuantity;
typedef struct node { //创建一个结点
VectorQuantity Data;
struct node *next;
}linklist;
linklist ExtData;
linklist *GetData() //从键盘获取数据
{
VectorQuantity vq;
linklist *head, *s; //获取第一个结点数据
head = NULL;
scanf_s("%d", &vq.Value);
vq.Dir = getchar();
while (vq.Dir == 'N')
{
s = (linklist*)malloc(sizeof(linklist));
s->Data.Value = vq.Value;
s->Data.Dir = vq.Dir;
s->next = head;
head = s;
scanf_s("%d", &vq.Value);
vq.Dir = getchar();
}
s = (linklist*)malloc(sizeof(linklist));
s->Data.Value = vq.Value;
s->Data.Dir = vq.Dir;
s->next = head;
head = s;
return head;
}
linklist *Head;
void Move(linklist *list,int k)
{
linklist *ExchangeData = Head;
int K = k;
for (k;k > 0;k--)
ExchangeData = ExchangeData->next;
ExchangeData->next = Head;
Head = ExchangeData;
for (K;K > 0;k--)
ExchangeData = ExchangeData->next;
ExchangeData->next = NULL;
}
int length = 0;
linklist *CirculData(int K)
{
//循环k位
linklist *ExchangeList = Head;
while (ExchangeList != NULL)
{
length++;
ExchangeList = ExchangeList->next;
}
for (int i = 0;i < K;i++)
Move(ExchangeList,length-1);
return Head;
}
void main()
{
Head = GetData();
linklist *PrintData = CirculData(2);
int length = 0;
linklist *ExchangeList = Head;
printf("H");
while (ExchangeList != NULL)
{
length++;
ExchangeList = ExchangeList->next;
}
PrintData = PrintData->next;
for (int i = 0; i <= length; i++)
{
printf("(%d,%c)", PrintData->Data.Value, PrintData->Data.Dir);
PrintData = PrintData->next;
}
system("pause");
}