用c++语言写,需要完整的程序,能运行的
将链表的顺序颠倒过来,最好写清楚指针的具体实现的过程 谢谢谢谢
#include<iostream>
using namespace std;
const int N=6;
typedef int DataType;//类型定义
typedef struct node{ //单链表
DataType data;
struct node* next;
}LinkedNode,*LinkList;
/****由数组创建单链表****/
LinkList CreateList(DataType a[N])
{
LinkedNode* ListHead=new LinkedNode();
ListHead->data=a[0];
ListHead->next=NULL;
for(int i=N-1;i>=1;i--)
{
LinkedNode* p=new LinkedNode();
p->data=a[i];
p->next=ListHead->next;
ListHead->next=p;
}
return ListHead;
}
/****输出单链表****/
void PrintList(LinkList ListHead)
{
if(NULL==ListHead)cout<<"The List is empty!"<<endl;
else
{
LinkedNode* p=ListHead;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
}
void ReverseList(LinkedNode* pCur,LinkList& ListHead)
{
if( (NULL==pCur)||(NULL==pCur->next) )
{
ListHead=pCur;
}
else
{
LinkedNode* pNext=pCur->next;
ReverseList(pNext,ListHead); //递归逆置后继结点
pNext->next=pCur; //将后继结点指向当前结点。
pCur->next=NULL;
}
}
int main()
{
int a[N]={1,2,3,4,5,6};
LinkedNode* list=CreateList(a);
PrintList(list);
LinkedNode*pTemp=list;
ReverseList(pTemp,list);
PrintList(list);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
int data;
struct node *next;
}NODE;
void insert(NODE **head,NODE *node){
if((*head)==NULL){
*head=node;
(*head)->next=NULL;
}else{
//头插法
node->next=(*head);
(*head)=node;
}
}
//利用递归反转链表
NODE* reverse(NODE *first,NODE *second){
if(second==NULL)
return first;
NODE *third=second->next;
second->next=first;
return reverse(second,third);
}
int main(int argc,char *argv[]){
fprintf(stdout,"Input elements by order.Input negative to exit.\n");
int ele=0;
NODE *head=NULL;
//根据用户的输入头插法建立单向链表
while(1){
scanf("%d",&ele);
if(ele<0)
break;
NODE *node=(NODE*)malloc(sizeof(NODE));
memset(node,0x00,sizeof(NODE));
node->data=ele;
node->next=NULL;
insert(&head,node);
}
printf("The original link is: ");
NODE *curr=head;
while(curr!=NULL){
printf("%d ",curr->data);
curr=curr->next;
}
printf("\n");
if(head!=NULL){
NODE *second=head->next;
head->next=NULL;
NODE *newhead=reverse(head,second);
printf("The inversed link is: ");
curr=newhead;
while(curr!=NULL){
printf("%d ",curr->data);
curr=curr->next;
}
printf("\n");
}
return 0;
}
#include
using namespace std;
const int N=6;
typedef int DataType;//类型定义
typedef struct node{ //单链表
DataType data;
struct node* next;
}LinkedNode,*LinkList;
/****由数组创建单链表****/
LinkList CreateList(DataType a[N])
{
LinkedNode* ListHead=new LinkedNode();
ListHead->data=a[0];
ListHead->next=NULL;
for(int i=N-1;i>=1;i--)
{
LinkedNode* p=new LinkedNode();
p->data=a[i];
p->next=ListHead->next;
ListHead->next=p;
}
return ListHead;
}
/****输出单链表****/
void PrintList(LinkList ListHead)
{
if(NULL==ListHead)cout<<"The List is empty!"< else
{
LinkedNode* p=ListHead;
while(p!=NULL)
{
coutdata<<" ";
p=p->next;
}
cout< }
}
void ReverseList(LinkedNode* pCur,LinkList& ListHead)
{
if( (NULL==pCur)||(NULL==pCur->next) )
{
ListHead=pCur;
}
else
{
LinkedNode* pNext=pCur->next;
ReverseList(pNext,ListHead); //递归逆置后继结点
pNext->next=pCur; //将后继结点指向当前结点。
pCur->next=NULL;
}
}
int main()
{
int a[N]={1,2,3,4,5,6};
LinkedNode* list=CreateList(a);
PrintList(list);
LinkedNode*pTemp=list;
ReverseList(pTemp,list);
PrintList(list);
return 0;
}