typedef struct SLnode
{
int data;
struct SLnode* next;
}SLnode,*SLnodelist;
int Initlist(SLnodelist la, int i, int num)
{
int j = 0;
SLnodelist p, q;
p = la;
while (p && j<i-1)
{
p = p->next;
j++;
}
if (!p || j>i-1)
{
perror("error");
exit(1);
}
q = (SLnodelist)malloc(sizeof(SLnode));
q->data = num;
q->next = p->next;// p <- q ->
p->next = q; // ->
return 1;
}
void printlist(SLnodelist list)
{
SLnodelist ret = list->next;//p2
while (ret)
{
printf("%d->", ret->data);
ret = ret->next;
}
printf("NULL\n");
}
void Invert(SLnodelist la)
{
SLnodelist p1, p2, p3;
p1 = NULL;
p2 = la->next;
p3 = p2->next;
while (p3)
{
p2->next = p1;
p1 = p2;
p2 = p3;
p3 = p2->next;
}
p2->next = p1;
la->next = p2;
}
int main()
{
int flag, num, count = 0;
SLnodelist la;
//la链表的初始化
la = (SLnodelist)malloc(sizeof(SLnode));
la->next = NULL;
printf("请输入la链表的元素,以-1结束输入\n");
scanf("%d", &num);
count++;
while (num != -1)
{
flag = Initlist(la, count, num);
scanf("%d", &num);
count++;
}
printf("la的元素为\n");
printlist(la);
Invert(la);
printf("逆转后\n");
printlist(la);
return 0;
}
(C语言版)设计一个算法,将链表中所有结点的链表方向“原地”逆转,即要求仅利用原表的存储空间,换句话说,要求算法的空间复杂度为O(1)
最新推荐文章于 2024-08-15 22:41:27 发布