問題很簡單:反轉乙個鍊錶。
其實就是對鍊錶的基礎操作,思路是順著煉表頭結點的next指標遍歷整個鍊錶。假設鍊錶前三個節點分別為a、b、c。
1.a->next = c;
2.b->next = a;
以a的next節點作為判斷依據即可遍歷整個鍊錶並實現前後兩個節點的指標反轉。雖然思路很簡單,但寫的時候發現c的快忘得差不多了,為了複習c我在c++工程中完全以c的**實現的。諸如new方法我用malloc方法替換手動為結構體分配堆記憶體等。並不影響程式執行,**如下:
#includeusing namespace std;
typedef struct node node;
//生成乙個節點
struct node* createnode()
//構建乙個鍊錶
void createnodetable(struct node * start)
}//列印乙個鍊錶
void printnodetable(struct node * start)
cout << temp->data;
cout << endl;
}//翻轉乙個鍊錶
struct node * reversenodetable(struct node * start)
return thisnode;
}int main()
}
顯然時間複雜度僅為o(n),空間複雜度是常數級的複雜度。
演算法 反轉鍊錶
編寫帶 實現反轉單鏈表。如 1,2,3,4,5 變為 5,4,3,2,1 要求空間複雜度為o 1 先直接給出乙份完整的 可以直接執行。c include include include typedef int datatype 鍊錶持有的資料的型別 typedef struct node 結點的定義...
演算法 鍊錶反轉
題目 分別實現反轉單向鍊錶和反轉雙向鍊錶的函式。要求如果鍊錶長度為n,時間複雜度要求為o n 額外空間 複雜度要求為o 1 反轉單向鍊錶 class node 反轉單向鍊錶 param head 煉表頭節點 return private static node reverselist node he...
演算法 反轉鍊錶
package bytedance author lzy version 1.0 date 2020 9 4 16 09 反轉鍊錶 public class reverselist public listnode reverselist listnode head 第乙個指標 指向空 翻轉後的末尾節...