/*
带头结点的单链表逆置
*/
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node* next;
};
struct node* creat(){ //构造单链表
int i,num;
struct node* head;
struct node* q;
head = (struct node*)malloc(sizeof(struct node));
head->next = NULL;
q = head;
printf("请输入10个元素:");
for(i = 0;i < 10;i++){
struct node* p = (struct node*)malloc(sizeof(struct node));
scanf("%d",&num);
p->data = num;
q->next = p;
q = p;
q->next = NULL;
}
head->data = i; //头结点存储节点个数
printf("逆置前:");
output(head); //打印
return head;
}
void output(struct node* head){
struct node* p;
p = head;
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
struct node* ReverseLink(struct node *head){
//单链表逆置函数,返回头指针
if((head == NULL) || (head->next == NULL))
return head;
//如果只有头节点或者只有一个头结点和一个数据节点,不用逆置
struct node* cur;
struct node* temp;
cur = head->next->next;
head->next->next = NULL;
while(cur){
temp = cur->next;
cur->next=head->next;
head->next=cur;
cur = temp;
}
return head;
}
int main(){
struct node* head = creat();
head = ReverseLink(head);
printf("逆置后:");
output(head);
}
(数据结构)设计一算法,逆置带头结点的单链表head,要求利用原表的结点空间,并要求用尽可能少的时间完成。
最新推荐文章于 2023-11-29 11:12:16 发布