zoukankan      html  css  js  c++  java
  • 逆序创建链表及链表反转和中间位置反转

     1 #include <iostream>
     2 using namespace std;
     3 typedef struct LNode 
     4 {
     5     int data;
     6     LNode *next;
     7 }LNode,*LinkList;
     8 //逆位序输入n个元素的值,建立带头结点的单链线性表
     9 LinkList createLinklist(LinkList &L)
    10 {
    11     L = (LinkList)malloc(sizeof(LNode));
    12     L->next = NULL;//建立头结点
    13     for (int i = 0; i <= 10;i++) {
    14         LinkList p = (LinkList)malloc(sizeof(LNode));
    15         p->data = i;
    16         p->next = L->next;
    17         L->next = p;
    18     }
    19     return L;
    20 }
    21 //链表反转
    22 LinkList listReversal(LinkList &L)
    23 {
    24     LinkList preNode=NULL; //前一个节点
    25     LinkList node = L->next;     //后一个节点(L为头结点)
    26     LinkList nextNode = NULL;//中间节点
    27     while (node!=NULL) {
    28         nextNode = node->next;  //保存下一个节点的值
    29         node->next = preNode;    //把当前节点的下一个节点指向preNode;
    30         preNode = node;            //将preNode向后移动指向此时的node
    31         node = nextNode;        //将node向后移动指向nextNode
    32     }
    33     L->next = preNode;
    34     return L;
    35 }
    36   //中间位置反转
    37 LinkList middlePositionInversion(LinkList &L)
    38 {
    39     LinkList Lhead=L->next;
    40     int num = 0;
    41     while (Lhead) {//就算链表的长度
    42         num++;
    43         Lhead = Lhead->next;
    44     }
    45     LinkList curNode = L->next;
    46     int i = 1;
    47     while (i<num/2+1) {//寻找要反转后的前一个节点的指针(退出循环后,第i个元素的指针为curNode)
    48         i++;
    49         curNode = curNode->next;
    50     }
    51     LinkList preNode=NULL;
    52     LinkList node=curNode->next;
    53     LinkList nextNode=NULL;
    54     while(node!=NULL){
    55         nextNode = node->next;
    56         node->next = preNode;
    57         preNode = node;
    58         node = nextNode;
    59     }
    60     curNode->next = preNode;
    61     return L;
    62 }
    63 int main()
    64 {
    65     LinkList linkList;
    66     LinkList L=createLinklist(linkList);
    67     //LinkList LL=listReversal(L);
    68     LinkList LL = middlePositionInversion(L);
    69     LL = LL->next;
    70     while (LL) {
    71         cout << LL->data << " ";
    72         LL = LL->next;
    73     }
    74     cout << endl;
    75     return 0;
    76 }
  • 相关阅读:
    c#反射动态创建窗体
    ImageSwitcher 图片切换器
    viewSwitcher 切换视图
    ratingBar 星级评分条
    seekBar拖动滑块
    pythonUDP发送结构体,对齐到C++结构体
    pyqt5界面
    progressbar
    SVN服务器搭建和使用(一)
    关于MBR、GPT以及BIOS引导模式区分
  • 原文地址:https://www.cnblogs.com/dingou/p/5828985.html
Copyright © 2011-2022 走看看