劍指Offer之反轉鏈表
- 題目描述:
-
輸入一個鏈表,反轉鏈表後,輸出鏈表的所有元素。
(hint : 請務必使用鏈表)
- 輸入:
-
輸入可能包含多個測試樣例,輸入以EOF結束。
對於每個測試案例,輸入的第一行為一個整數n(0<=n<=1000):代表將要輸入的鏈表的個數。
輸入的第二行包含n個整數t(0<=t<=1000000):代表鏈表元素。
- 輸出:
-
對應每個測試案例,
以此輸出鏈表反轉後的元素,如沒有元素則輸出NULL。
- 樣例輸入:
-
5 1 2 3 4 5 0
- 樣例輸出:
-
5 4 3 2 1 NULL
【解析】
【代碼】
/********************************* * 日期:2013-11-21 * 作者:SJF0115 * 題號: 題目1518:反轉鏈表 * 來源:https://ac.jobdu.com/problem.php?pid=1518 * 結果:AC * 來源:劍指Offer * 總結: **********************************/ #include<iostream> #include <stdio.h> #include <malloc.h> #include <string.h> using namespace std; typedef struct ListNode{ int value; struct ListNode *next; }ListNode; ListNode* ReverseList(ListNode*head){ //容錯處理 if(head == NULL){ return NULL; } else{ ListNode *p,*pre,*pnext; //帶頭節點的鏈表 pre = NULL; p = head->next; while(p != NULL){ pnext = p->next; //最後一個節點 if(pnext == NULL){ head = p; } p->next = pre; pre = p; p = pnext; } return head; } } int main() { int i,n; while(scanf("%d",&n) != EOF){ ListNode *head,*p,*pre; //創建鏈表 head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; pre = head; for(i = 0;i < n;i++){ p = (ListNode*)malloc(sizeof(ListNode)); scanf("%d",&p->value); p->next = NULL; pre->next = p; pre = p; } //無數據 if(n <= 0){ printf("NULL\n"); } //輸出反轉後數據 else{ //反轉 head = ReverseList(head); //輸出 p = head; while(p != NULL){ if(p->next == NULL){ printf("%d\n",p->value); } else{ printf("%d ",p->value); } p = p->next; } } } return 0; }
/********************************* * 日期:2013-11-21 * 作者:SJF0115 * 題號: 題目1518:反轉鏈表 * 來源:https://ac.jobdu.com/problem.php?pid=1518 * 結果:AC * 來源:劍指Offer * 總結: **********************************/ #include<iostream> #include <stdio.h> #include <malloc.h> #include <string.h> using namespace std; typedef struct ListNode{ int value; struct ListNode *next; }ListNode; ListNode* ReverseList(ListNode*head){ //容錯處理 if(head == NULL){ return NULL; } else{ ListNode *p,*pnext; //帶頭節點的鏈表 p = head->next; head->next = NULL; while(p != NULL){ pnext = p->next; p->next = head->next; head->next = p; p = pnext; } return head; } } int main() { int i,n; while(scanf("%d",&n) != EOF){ ListNode *head,*p,*pre; //創建鏈表 head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; pre = head; for(i = 0;i < n;i++){ p = (ListNode*)malloc(sizeof(ListNode)); scanf("%d",&p->value); p->next = NULL; pre->next = p; pre = p; } //無數據 if(n <= 0){ printf("NULL\n"); } //輸出反轉後數據 else{ //反轉 head = ReverseList(head); //輸出 p = head->next; while(p != NULL){ if(p->next == NULL){ printf("%d\n",p->value); } else{ printf("%d ",p->value); } p = p->next; } } } return 0; }
最後更新:2017-04-03 14:54:25