迭代反转链表
Test* reverLink(Test* head)
{
Test* p = head;
if(p == NULL||p->next == NULL){
return head;
}
else{
Test* beg = NULL;
Test* mid= head;
Test* end = mid->next;
while(1){
mid->next = beg;
if(end == NULL){
break;
}
beg = mid;
mid = end;
end = end->next;
}
head = mid;
return head;
}
}
头插法反转链表
Test* reverLink(Test* head)
{
Test* new_head = NULL;
Test* temp = NULL;
if(head == NULL || head->next == NULL){
return head;
}
while(head!=NULL){
temp = head;
head = head->next;
temp->next = new_head;
new_head = temp;
}
return new_head;
}
完整测试代码
#include<stdio.h>
#include<stdlib.h>
typedef struct Test
{
int data;
struct Test *next;
}Test;
//打印链表
void printLink(Test* p)
{
Test* head = p;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
putchar('\n');
}
//从链表尾部插入
void insertBehindHead(Test *head)
{
Test* new = NULL;
while(1)
{
new =(Test*) malloc(sizeof(struct Test));
printf("insert data,input 0 quit\n");
scanf("%d",&(new->data));
if(new->data == 0){
break;
}
if(head == NULL){
head = new;
}
while(head->next != NULL){
head = head->next;
}
head->next = new;
}
}
//从链表头部前插入
Test* insertFromHead(Test* head)
{
Test* new = NULL;
while(1)
{
new = (Test*)malloc(sizeof(Test));
printf("insert data,input -1 quit\n");
scanf("%d",&(new->data));
if(new->data == -1){
break;
}
if(head == NULL){
head = new;
}
else{
new->next = head;
head = new;
}
}
return head;
}
/*迭代反转链表
Test* reverLink(Test* head)
{
Test* p = head;
if(p == NULL||p->next == NULL){
return head;
}
else{
Test* beg = NULL;
Test* mid= head;
Test* end = mid->next;
while(1){
mid->next = beg;
if(end == NULL){
break;
}
beg = mid;
mid = end;
end = end->next;
}
head = mid;
return head;
}
}
*/
//头插法反转链表
Test* reverLink(Test* head)
{
Test* new_head = NULL;
Test* temp = NULL;
if(head == NULL || head->next == NULL){
return head;
}
while(head!=NULL){
temp = head;
head = head->next;
temp->next = new_head;
new_head = temp;
}
return new_head;
}
int main()
{
Test t1 = {12,NULL};//静态创建
Test t2 = {13,NULL};
t1.next = &t2;
Test* point = NULL;
insertBehindHead(&t1);
point = insertFromHead(&t1);
printLink(point);//print
Test* p1 = reverLink(point);
printLink(p1);
return 0;
}
输出结果: