【資料結構】遞迴實現連結串列逆序
關於本篇文章,先參見本人之前的一篇部落格,與之相關:
http://blog.csdn.net/kuzuozhou/article/details/7451289
另外,參考:
http://blog.csdn.net/ssjhust123/article/details/7754103
#include<stdio.h>
#include <stdlib.h>
typedef struct node//節點存放一個資料和指向下一個節點的指標
{
int data;
struct node* pnext;
} Node;
Node *link_create()//連結串列建立
{
int item;
Node *head = NULL;
do
{
Node *p;
scanf("%d",&item);
p = (Node *)malloc(sizeof(Node));
if(p == NULL)
{
printf("memory applied failed\n");
break;
}
p->data = item;
p->pnext = head;
head = p;
}while(getchar() != '\n');
return head;
}
void link_show(Node *head)
{
Node* p;
p=head;
while(p != NULL)
{
printf("%d ",p->data);
p = p->pnext;
}
printf("\n");
}
void link_destroy(Node *head)
{
Node* p;
Node* tmp;
p=head;
while(p != NULL)
{
tmp = p->pnext;
free(p);
p = tmp;
}
}
//Node *link_reverse(Node *head)
//{
// Node *pre,*cur,*next;
// /*head->pnext =NULL;*/
//
// pre = head;
// cur = pre->pnext;
// next = cur->pnext;
// head->pnext =NULL;//第一次的pre,cur,next
//
// if(next == NULL)//連結串列只有兩個節點,如果沒有此語句,當連結串列確實只有兩個節點時,就會發生錯誤。
// {
// cur->pnext = pre;
// head = cur;
// return head;
// }
//
// while(next->pnext != NULL)
// {
// cur->pnext = pre;//修改指標,每次迴圈修改一次
//
// pre = cur;
// cur = next;
// next = next->pnext;
// }//迴圈終止時,next->pnext == NULL
// cur->pnext = pre;
// next->pnext = cur;
// head = next;
// return head;
//
//}
void link_reverse(Node **headRef)//遞迴來實現連結串列逆序,相比上面註釋的部分實現,顯得相當簡潔
{
Node *first,*rest;
if(*headRef == NULL)
return;
first = *headRef;
rest = first->pnext;
if(rest == NULL)
return;
link_reverse(&rest);
first->pnext->pnext = first;
first->pnext = NULL;
*headRef = rest;
}
int main()
{
Node *new_head=NULL;
Node *head = link_create();
link_show(head);
//new_head = link_reverse(head);
link_reverse(&head);
link_show(new_head);
link_destroy(new_head);
//system("pause");
return 0;
}
相關文章
- 資料結構實驗之連結串列二:逆序建立連結串列資料結構
- 【資料結構】實現迴圈連結串列(c++)資料結構C++
- 資料結構之迴圈連結串列資料結構
- 連結串列逆序
- js實現資料結構--單連結串列JS資料結構
- 【資料結構】連結串列(單連結串列實現+詳解+原碼)資料結構
- php實現基本資料結構之連結串列PHP資料結構
- 資料結構 - 單連結串列 C++ 實現資料結構C++
- Python資料結構——連結串列的實現Python資料結構
- 【資料結構】實現單連結串列(c++)資料結構C++
- 資料結構(雙向連結串列的實現)資料結構
- 【資料結構】雙迴圈連結串列(c++)資料結構C++
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 資料結構-連結串列資料結構
- 資料結構 - 連結串列資料結構
- 連結串列-資料結構資料結構
- 資料結構--連結串列資料結構
- 資料結構—連結串列資料結構
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 資料結構-雙向連結串列(Python實現)資料結構Python
- 資料結構之php實現單向連結串列資料結構PHP
- 資料結構——單連結串列的C++實現資料結構C++
- [資料結構]連結串列的實現在PHP中資料結構PHP
- [資料結構] 連結串列的實現在 PHP 中資料結構PHP
- 利用遞迴實現連結串列的排序(歸併排序)遞迴排序
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- 資料結構-遞迴資料結構遞迴
- 資料結構與演算法--迴圈連結串列資料結構演算法
- 資料結構-單連結串列、雙連結串列資料結構
- Java 單連結串列逆序Java
- 資料結構實驗之連結串列三:連結串列的逆置資料結構
- 資料結構實驗之連結串列五:單連結串列的拆分資料結構
- 資料結構實驗之連結串列六:有序連結串列的建立資料結構
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- 資料結構——單連結串列介面實現(C語言)資料結構C語言
- 資料結構--單連結串列(通過陣列實現)資料結構陣列
- 用c語言實現資料結構——單連結串列C語言資料結構
- javascript的資料結構快速學-連結串列的實現JavaScript資料結構