单链表的建立,并进行原地逆置
问题描述:
单链表中数据原来是非递减排列的数据,请设计算法实现将其数据原地逆置
提示:要有create函数进行单链表的建立
答
代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct link_node
{
datatype info;
struct link_node* next;
}node,*linklist;
linklist createList()
{
datatype x;
linklist L;
char ch;
L = (linklist)malloc(sizeof(node));
if (L == NULL)
{
printf("error");
return 0;
}
linklist n,p;
p = L;
printf("请输入整数系列:\n"); //输入系列并以回车结束
while(1)
{
scanf_s("%d",&x,1);
n = (linklist)malloc(sizeof(node));
n->info = x;
n->next = NULL;
p->next = n;
p = n;
if( (ch=getchar()) == '\n') break;
}
return L;
}
void print(linklist head)
{
linklist p;
p = head->next;
while(p)
{
printf("%d ",p->info);
p = p->next;
}
printf("\n");
}
//翻转
linklist reverse(linklist head)
{
linklist p,t,k;
p = head->next;
t = p->next;
p->next = NULL;
while(t)
{
k = t->next;
head->next = t;
t->next = p;
p = t;
t = k;
}
return head;
}
//释放内存
void release(linklist head)
{
linklist p;
while(head)
{
p = head->next;
free(head);
head = p;
}
}
int main()
{
linklist head = createList();
print(head);
head = reverse(head);
printf("逆序后:");
print(head);
release(head);
return 0;
}
答
带头结点,将第二个节点不断插入到头结点后面