Inverse(LinkList
&L)
/*
*/
{
if
(L->next
!=
NULL)
{
if
(L->next->next
==
NULL)
{
}
else
if
(L->next->next->next
==
NULL)
{
LNode
*p
p=L->next
L->next->next->next=L->next
L->next=L->next->next
p->next=NULL
}
else
{
LNode
*p,
*q,
*r
p
=
L->next
q
=
p->next
r
=
q->next
p->next
=
NULL
while
(r->next
!=
NULL)
{
q->next
=
p
p
=
q
q
=
r
r
=
r->next
}
q->next
=
p
r->next
=
q
L->next
=
r
}
}
}
请给分
!!!
/**链表应用要求:1建立 2删除 3输出 4反序 5主函数
*/
#include<iostream>
#include<iomanip>
using namespace std
typedef struct Lnode{
int data
struct Lnode *next
}Lnode,*LinkList
//初始化链表
bool initList(LinkList &L)
{
L=new Lnode
if(L==NULL){
cerr<<"内存分配错误!"<<endl
return false
}
L->next=NULL
return true
}
//创建链表
bool createList(LinkList &L)
{
int n,data
LinkList p=L,r
cout<<"输入链表元素的个数:"
cin>>n
cout<<"输入链表中的元素:"
for(int i=0i<n++i){
cin>>data
r=new Lnode
if(r==NULL){
cerr<<"内存分配错误!"<<endl
return false
}
r->data=data
r->next=p->next
p->next=r
p=r
}
p->next=NULL
return true
}
//删除链表中的元素
bool deleteList(LinkList L)
{
int pos
LinkList p=L
if(p->next==NULL){
cout<<"链表是空的!"<<endl
return false
}
cout<<"输入你要删除的位置:"
cin>>pos
for(int i=0i<pos-1++i){
p=p->next
}
LinkList q=p->next
cout<<"你删除的第"<<pos<<"个位置的元素是:"<<q->data<<endl
p->next=q->next
delete q
return true
}
//逆序输出链表中的元素
bool invertList(LinkList &L)
{
LinkList p=L->next
if(p==NULL) return false
else invertList(p)//采用递归的方式逆序输出链表
cout<<p->data<<setw(5)
return true
}
//输出链表中的元素
bool dispList(LinkList L)
{
LinkList p=L->next
if(p==NULL){
cout<<"链表是空的!"<<endl
return false
}
cout<<"链表中的元素为:"
while(p){
cout<<p->data<<setw(5)
p=p->next
}
cout<<endl
return true
}
void main()
{
LinkList L
initList(L)
createList(L)
dispList(L)
deleteList(L)
dispList(L)
cout<<"逆序输出的元素为:"
invertList(L)
cout<<endl
}
题目中的将链表逆序,如果用单链表实现有点麻烦,我再想想有没有好的办法。
上面的程序中我只是将链表的元素逆序输出,至于将链表逆序,我想好了会回复你的。
纯C实现(假设链表有头结点):#include<stdio.h>
//链表结构定义
typedef struct node
{
int data
struct node* next
}*LinkList
//函数:将链表中的各结点显示出来
void Show(LinkList head)
{
LinkList p = head->next
while(p != head)
{
printf("%d ",p->data)
p = p->next
}
printf("\n")
}
void main()
{
LinkList head = new node//头结点
LinkList p,q//临时指针
q = head
//生成链表
for(int i = 1i<=10i++)
{
p = new node
p->data = i
q->next = p
q = p
}
p->next = head
printf("反向前,链表结点值依次为:\n")
Show(head)
//反向
LinkList r
q = head
p = q->next
r = p->next
while(p != head)
{
p->next = q
q = p
p = r
r = r->next
}
p->next = q
printf("反向后,链表结点值依次为:\n")
Show(head)
}
我已运行过,很成功。