国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言數據結構 link 鏈表反轉的實現

2020-05-23 13:43:13
字體:
來源:轉載
供稿:網友

C語言數據結構 link 鏈表反轉的實現

鏈表反轉,示例如下:

偶數個輸入:a->b->c->d->e->f
偶數個輸出:e->f->c->d->a->b
or
奇數個輸入:a->b->c->d->e->f->g
偶數個輸出:g->e->f->c->d->a->b

#include <stdio.h> #include <malloc.h>  #include <stdlib.h>  /************** start of stack *************/  #define STACK_SIZE 1024  char stack[STACK_SIZE]; int top = 0;  void push(char ch){   stack[top] = ch;   top++; }  char pop(){   top--;   return stack[top]; }  int isempty(){   return 0 == top; }  void test_stack(){   push('a');   push('b');   push('c');   push('d');    while(!isempty()){     printf("pop ch: %c/n", pop());   } }  /************** end of stack *************/     struct _node{   char data;   struct _node *next; };  typedef struct _node node, *plink;   plink init_link(){   plink pl;   pl = (plink)malloc(sizeof(node));      // check malloc success or not   if(NULL == pl) {     printf("malloc memory fail...");     return NULL;   }      // init link head   pl->data = '/0';   pl->next = NULL;      return pl; }  void input_data(plink pl, char data){   plink p = pl;      while(p->next){     p = p->next;   }      plink node = NULL;   node = (plink)malloc(sizeof(node));   // malloc a new node      // add data   if(NULL != node){     node->data = data;     node->next = p->next;    // last next is NULL     p->next = node;     p = node;          // p point last node   } }  void output_link(plink pl){   if(NULL == pl){     printf("plink is null");     return;   }      plink p = pl->next;  // already check pl is NULL, so here is ok   while(NULL != p){     printf("%c -> ", p->data);     p = p->next;   }    printf("/n/n");     }    // push and pop stack plink revert_link2(plink pl){   plink p = pl;    while(p->next){ //    printf("p->data: %c/n", p->next->data);     if(p->next->next){       push(p->next->next->data);       push(p->next->data);       p = p->next->next;     } else {       push(p->next->data);       p = p->next;     }   }    while(!isempty()){     printf("%c -> ", pop());   }      printf("/n/n");    return NULL; }    plink revert_link(plink pl){   if(NULL == pl){  // check link is NULL     return NULL;   }      int link_len = 0;   plink tmp_pl = pl->next;      while(tmp_pl){  // count link count     link_len++;     tmp_pl = tmp_pl->next;   }      // link length is no more than two node(s)   if(link_len <= 2){     return pl;   }      // link length is more than two nodes   return revert_link2(pl); }     int main(){   plink pl = NULL;      pl = init_link();     // init link head      input_data(pl, 'a');   // add data   input_data(pl, 'b');   input_data(pl, 'c');   input_data(pl, 'd');   input_data(pl, 'e');   input_data(pl, 'f');   input_data(pl, 'g');      output_link(pl);      plink pl2 = revert_link(pl);      output_link(pl2);    return 0; }    /**** revert_link.c   linux gcc compile gcc revert_link.c -o revert_link && ./revert_link   output result:  a -> b -> c -> d -> e -> f -> g g -> e -> f -> c -> d -> a -> b  or  a -> b -> c -> d -> e -> f e -> f -> c -> d -> a -> b   ****/ 

間隔螺旋反轉:

輸入: a -> b -> c -> d -> e -> f
輸出: b -> a -> d -> c -> f -> e

plink revert_link3(plink pl){   if(NULL == pl){     printf("plink is null");     return NULL;     }      plink p = pl;   plink first = p->next;   while(NULL != first){     plink second = first->next;     if(NULL != second){       first->next = second->next;   // third node       second->next = first;      // revert two nodes       first = first->next;       p->next = second;       p = second->next;     }   }   return pl; } 

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 驻马店市| 南漳县| 田东县| 平塘县| 桐柏县| 灌云县| 东兰县| 松滋市| 甘南县| 海淀区| 连城县| 兴业县| 怀集县| 贵溪市| 祁门县| 方正县| 五大连池市| 肃宁县| 河北省| 兴业县| 丰原市| 桂平市| 家居| 彭山县| 惠来县| 富锦市| 纳雍县| 延边| 长治县| 兴和县| 永泰县| 卓资县| 托里县| 报价| 镇雄县| 诸暨市| 巴楚县| 清流县| 田东县| 田阳县| 雅江县|