2 qq 21890183 qq_21890183 于 2016.03.28 16:38 提问

单链表具体实现实现reverse

用c++语言写,需要完整的程序,能运行的
将链表的顺序颠倒过来,最好写清楚指针的具体实现的过程 谢谢谢谢

3个回答

lx624909677
lx624909677   Ds   Rxr 2016.03.28 16:46
已采纳
 #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;
}
caozhy
caozhy   Ds   Rxr 2016.03.28 16:43
 #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;
}
u014532650
u014532650   2016.03.28 16:44

#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;

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
秒懂单链表及其反转(reverse)
什么是链表,这种数据结构是由一组Node组成的,这群Node一起表示了一个序列。链表是最普通,最简单的数据结构,它是实现其他数据结构如stack, queue等的基础。 链表比起数组来,更易于插入,删除。 Node可以定义如下: typedef int element_type; typedef struct node *node_ptr; struct node { el
4-1 单链表逆转
本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ };
单链表的reverse
单链表的反序:将已有链表的节点的值反序废话不多说直接上代码;下面代码提供了两个版本,sll_reverse是我自己做的时候想的笨办法,answer_reverse是我在网上看的一个版本(非常精简)。#include&amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #define N 5 typedef struct NODE{ struct NODE *l...
4-1单链表逆转
学习完链表以后,在刷PTA的时候,遇见第一题就卡壳了,真是悲哀,是一道关于单链表逆转的,其实还是很简单的,不过因为搞错了位置,再加上其他函数也是第一次用C写,输出的一直是NULL,就把这段代码敲出来方便大家以后看。 4-1 单链表逆转   (20分) 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List
详解链表的转置问题
//题目:                      ------------------链表的转置------------------------// 要求://      将链表的就地转置。就是将链表的数据存储倒置//例://     输入:12345678910//     输出:10987654321// 算法分析://         程序最主要的地方再于将头接点的后的每个接点都放再
带头结点的单链表转置
带头结点的单链表转置
4-1 单链表逆转 (20分)
本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L ); 其中List结构定义如下:typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef
数据结构与算法(3 Reverse链表)
首先个人理解数组和链表的异同点: 1:数组是一个有固定容量的容器,在内存中是一个一个排列着,有自己的固定长度,虽然可以生成动态数组,但是不建议,因为消耗内存。所以如果想从数组中插入或者删除一个元素的时候,就显得资源消耗比较大,因为每插入一个,数组就要向后移动插入位置之后的每一个位置。所以数组在插入删除中效率是比较低的,然后数组可以通过index索引,直接查到数组的对应索引的元素。 2:链表跟数组
6-1 单链表逆转
6-1 单链表逆转(20 分) 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /
6-1 单链表逆转(20 point(s))
6-1 单链表逆转(20 point(s)) 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode