// ReverseLink.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
struct Node
{
int data;
Node* next;
};
void CreateLink(Node* &head,int data);
void PrintLink(Node* head);
void ReverseLink(Node* &head);
Node* ReverseLink(Node* node,int curIndex);
int main(int argc, char* argv[])
{
Node* head = NULL;
int i = 0;
for (i=0;i<10;++i)
{
CreateLink(head,i+2);
}
PrintLink(head);
// ReverseLink(head);
head = ReverseLink(head,0);
PrintLink(head);
return 0;
}
Node* ReverseLink(Node* node,int curIndex)
{
Node* ptr = NULL;
if (node->next)
{
ptr = ReverseLink(node->next,curIndex+1); //获取下一层的指针
}
else
{
node->next = node;
return node;
}
node->next = ptr->next;
ptr->next = node;
if (curIndex==0)
{
ptr = node->next;
node->next = NULL;
return ptr;
}
else
{
return node;
}
}
void ReverseLink(Node* &head)
{
Node* p,*q,*m;
p = head;
p = head;
q = head->next;
while(q)
{
m = q->next;
q->next = p;
p = q;
q = m;
}
head->next = NULL;
head = p;
}
void PrintLink(Node* head)
{
while(head)
{
printf("%d\n",head->data);
head = head->next;
}
}
void CreateLink(Node* &head,int data)
{
Node* ptr;
if (head == NULL)
{
ptr = (Node*)malloc(sizeof(Node));
ptr->next = NULL;
ptr->data = data;
head = ptr;
return;
}
ptr = (Node*)malloc(sizeof(Node));
ptr->next = head;
ptr->data = data;
head = ptr;
}
反转链表(递归和非递归实现)
最新推荐文章于 2020-12-05 13:31:17 发布