• 数据结构:单链表的就地逆置


    6-1 带头结点的单链表就地逆置(10 分)
     

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数。L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置,如原单链表元素依次为1,2,3,4,则逆置后为4,3,2,1。

    函数接口定义:

    void ListReverse_L(LinkList &L);
    

    其中 L 是一个带头结点的单链表。

    裁判测试程序样例:

    
     

    //库函数头文件包含

    #include<stdio.h>

    #include<malloc.h>

    #include<stdlib.h>

    1. //函数状态码定义

    2. #define TRUE 1

    3. #define FALSE 0

    4. #define OK 1

    5. #define ERROR 0

    6. #define INFEASIBLE -1

    7. #define OVERFLOW -2

    8.  
    9. typedef int Status;

    10. typedef int ElemType; //假设线性表中的元素均为整型

    11.  
    12. typedef struct LNode

    13. {

    14. ElemType data;

    15. struct LNode *next;

    16. }LNode,*LinkList;

    17.  
    18. Status ListCreate_L(LinkList &L,int n)

    19. {

    20. LNode *rearPtr,*curPtr; //一个尾指针,一个指向新节点的指针

    21. L=(LNode*)malloc(sizeof (LNode));

    22. if(!L)exit(OVERFLOW);

    23. L->next=NULL; //先建立一个带头结点的单链表

    24. rearPtr=L; //初始时头结点为尾节点,rearPtr指向尾巴节点

    25. for (int i=1;i<=n;i++){ //每次循环都开辟一个新节点,并把新节点拼到尾节点后

    26. curPtr=(LNode*)malloc(sizeof(LNode));//生成新结点

    27. if(!curPtr)exit(OVERFLOW);

    28. scanf("%d",&curPtr->data);//输入元素值

    29. curPtr->next=NULL; //最后一个节点的next赋空

    30. rearPtr->next=curPtr;

    31. rearPtr=curPtr;

    32. }

    33. return OK;

    34. }

    35. void ListReverse_L(LinkList &L);

    36. void ListPrint_L(LinkList &L){

    37. //输出单链表

    38. LNode *p=L->next; //p指向第一个元素结点

    39. while(p!=NULL)

    40. {

    41. if(p->next!=NULL)

    42. printf("%d ",p->data);

    43. else

    44. printf("%d",p->data);

    45. p=p->next;

    46. }

    47. }

    48. int main()

    49. {

    50. LinkList L;

    51. int n;

    52. scanf("%d",&n);

    53. if(ListCreate_L(L,n)!= OK) {

    54. printf("表创建失败!!! ");

    55. return -1;

    56. }

    57. ListReverse_L(L);

    58. ListPrint_L(L);

    59. return 0;

    60. }/* 请在这里填写答案 */

    输入格式:

    第一行输入一个整数n,表示单链表中元素个数,接下来一行共n个整数,中间用空格隔开。

    输出格式:

    输出逆置后顺序表的各个元素,两个元素之间用空格隔开,最后一个元素后面没有空格。

    输入样例:

    4
    1 2 3 4
    

    输出样例:

    4 3 2 1
    
     

    void ListReverse_L(LinkList &L)  

    {  

        LNode *p=L->next,*q;  

        L->next=NULL;  

        while(p!=NULL)  

       {  

            q=p->next;  

            p->next=L->next;  

            L->next=p;  

           p=q;  

        }  

    }  

    /*思路:①将原来的头结点拆下来,作为新的逆置链表的头结点 

              ②将原来链表的各个节点,依次拆卸下来,然后按照头插法,插入到逆置链表当中 

              ③循环,直到原来的链表为空即可。*/</code>  

    --------------------- 本文来自 sensen426521 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/sensen426521/article/details/78243606?utm_source=copy

  • 相关阅读:
    ios9 之后 配置百度地图出现的错误
    While reading XXX pngcrush caught libpng error: N
    主题:Java WebService 简单实例
    win7下如何建立ftp服务器
    64.Minimum Path Sum
    63.Unique Path II
    62.Unique Paths
    32.Longest Valid Parenttheses
    105.Construct Binary Tree from Preorder and Inorder Traversal
    83.Remove Duplicates from Sorted List
  • 原文地址:https://www.cnblogs.com/zw1sh/p/10181443.html
Copyright © 2020-2023  润新知