首页 > 装修问答 > 其它 > 设计一个算法,将一个带头结点的数据域依次为a1,a2,。。an(n>=3)的单链表的所有结点逆置。。。。急急急!?

设计一个算法,将一个带头结点的数据域依次为a1,a2,。。an(n>=3)的单链表的所有结点逆置。。。。急急急!?

浏览次数:1032|时间:2024-05-06

热门回答

2024-05-16吃得圆圆的
void Reverae(LinkList * &head)
{
LinkList *p=head->next;
head->next=Null;
while (p!=Null)
{
q=p->next;
p->next=珐籂粹饺诔祭达熄惮陇head->next;
head->next=p;
p=q;
}
}

145

2024-05-14emilylovejay

假设链表节点为

struct Node
{
  _data_type data;
  Node *next;
};

则算法如下:

void reverse(Node *head)
{
  Node *p,*q;
  if (head->next == NULL) return;
  p = q = head->next;
  while (p->next !=NULL)
  {
    head->next = p->next;
    p->next->next = q;
    q = p->next;
    p->next = p->next->next;
  珐籂粹饺诔祭达熄惮陇; }
}

74

2024-04-29青笋丝爱吃榴莲
#include <stdio.h>
#include <stdlib.h>
struct list
{
int data;
struct list* next;
};
/*创建单链表,此处为了示范,仅自动创建几个节点*/
struct list* create()
{
struct list *head = NULL, *p, *q;
int i;
head = p = (struct list*)malloc(sizeof(struct list));
p->data = 0;
for (i = 1; i <= 10; i++)
{
q = (struct list*)malloc(sizeof(struct list));
q->data = i;
p->next = q;
p = q;
}
p->next = NULL;
return head;
}
/*顺序输出单链表的所有值*/
void print(struct list* head)
{
struct list* p = head;
if (!head) puts("NULL");
while (p)
{
printf("%d ", p->data);
p = p->next;
}
}
/*反转单链表*/
struct list* reverse(struct list* head)
{
struct list *p = head, *q, *t;
if (!head) return NULL;
q = p->next;
while (q)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
head->next = NULL;
head = p;
return head;
}
int main(void)
{
struct list* head;
head = create();
head = reverse(head);
print(head);
return 0;
}

311

2024-05-19寻找茉莉花
#include<stdio.h>
struct node{
int data;
struct node *next;
}node,*list,*p,*r;
void JOSEPHU(int n,int k,int m)
{
int i,j;
list=NULL;
for(i=1;i<=n;i++)
{
p=(struct node*)malloc(sizeof(node));
p->data=i;
if(list==NULL)
list=p;
else
r->next=p;
r=p;
}
p->next=list; /*建立一个循环链表*/
p=list;
for(i=1;i<=n+1;i++)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n"); /*打印链表,并检查循环链表是不输入正确*/
p=list;
i=1;
while(p&&i<k)
{ r=p;
p=p->next;
++i;
}
for(i=1;i<n;i++)
{
for(j=1;j<m;j++)
{ r=p;
p=p->next;
}
printf("The out=%d\n",p->data);
r->next=p->next;
}
}
void main()
{
int x, y, z;
printf("input the lenth n\n");/*n,k,m分别代表总的人数,第一个报数的人,间隔的人数*/
scanf("%d",&x);
printf("input the start k\n");
scanf("%d",&y);
printf("input the m\n");
scanf("%d",&z);
JOSEPHU(x,y,z);
}

188