C/C++筆試經典——連結串列倒序
設連結串列節點為:
typedef struct tagListNode{
int data;
struct tagListNode* next;
}ListNode, *List;
要求將一帶連結串列頭List head的單向連結串列逆序。
分析:
1). 若連結串列為空或只有一個元素,則直接返回;
2). 設定兩個前後相鄰的指標p,q. 將p所指向的節點作為q指向節點的後繼;
3). 重複2),直到q為空
4). 調整連結串列頭和連結串列尾
示例:以逆序A->B->C->D為例,圖示如下
實現及測試程式碼如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct tagListNode{
int data;
struct tagListNode* next;
}ListNode, *List;
void PrintList(List head);
List ReverseList(List head);
int main()
{
//分配連結串列頭結點
ListNode *head;
head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
head->data = -1;
//將[1,10]加入連結串列
int i;
ListNode *p, *q;
p = head;
for(int i = 1; i <= 10; i++)
{
q = (ListNode *)malloc(sizeof(ListNode));
q->data = i;
q->next = NULL;
p->next = q;
p = q;
}
PrintList(head); /*輸出原始連結串列*/
head = ReverseList(head); /*逆序連結串列*/
PrintList(head); /*輸出逆序後的連結串列*/
return 0;
}
List ReverseList(List head)
{
if(head->next == NULL || head->next->next == NULL)
{
return head; /*連結串列為空或只有一個元素則直接返回*/
}
ListNode *t = NULL,
*p = head->next,
*q = head->next->next;
while(q != NULL)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
/*此時q指向原始連結串列最後一個元素,也是逆轉後的連結串列的表頭元素*/
head->next->next = NULL; /*設定連結串列尾*/
head->next = p; /*調整連結串列頭*/
return head;
}
void PrintList(List head)
{
ListNode* p = head->next;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("/n");
}
來自:http://blog.csdn.net/niuer09/article/details/5961004
相關文章
- 連結串列經典示例
- BAT 經典演算法筆試題 —— 逆轉單向連結串列BAT演算法筆試
- C++建立連結串列C++
- C++ STL list連結串列C++
- c++實現單連結串列C++
- C++連結串列小冊子C++
- 資料結構練習題(順序表和單連結串列)C++資料結構C++
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- [C++]歸併排序(連結串列描述)C++排序
- 資料結構連結串列筆試題資料結構筆試
- c++經典(轉)C++
- c/c++經典面試試題及標準答案C++面試
- 反轉連結串列(C++簡單區)C++
- C++連結串列常見面試考點C++面試
- C++實現通用雙向連結串列C++
- c/c++ 線性表之單向連結串列C++
- C++資料結構連結串列的基本操作C++資料結構
- 資料結構 - 單連結串列 C++ 實現資料結構C++
- 【資料結構】實現單連結串列(c++)資料結構C++
- 【資料結構】雙迴圈連結串列(c++)資料結構C++
- 經典C/C++面試題C++面試題
- C++經典面試題C++面試題
- leetcode 61 旋轉連結串列 c++LeetCodeC++
- C++單連結串列遞迴遍歷操作C++遞迴
- C++中的連結串列類的設計C++
- C/C++ 陣列連結串列表示式計算C++陣列
- 資料結構——單連結串列的C++實現資料結構C++
- 【資料結構】實現迴圈連結串列(c++)資料結構C++
- 帶頭結點的單連結串列實現(C++)C++
- 連結串列面試題(六)---刪除單連結串列倒數第k個結點面試題
- 【C++ 資料結構:連結串列】二刷LeetCode707設計連結串列C++資料結構LeetCode
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- 【C++】“反轉連結串列”相關的題目C++
- c/c++ 線性表之單向迴圈連結串列C++
- c/c++ 線性表之雙向迴圈連結串列C++
- C++ 經典案例1例C++
- OpenCV之C++經典案例OpenCVC++
- 【C++基礎複習01】結構體和連結串列C++結構體