- 題目:
? ? ? ? ? ? ? ? ? ??設計一個算法,要求將鏈表中所有節點的鏈接方向“原地”逆轉,即要求僅利用原表的存儲空間。
- 對于這個問題,首先要分析的是:鏈表中的頭和尾節點如何插入?其次就是:如何鏈接?
? ? ? 搞懂這兩個的問題,問題就迎刃而解了。
- 這次用的代碼,就是:c++軟件。
? ? ? ?先寫主函數,則代碼為:
int main()
{LinkList LA;LinkList LC;int n;cout << "請輸入需要創建單鏈表的長度:" << endl;cin >> n;cout << "請依次輸入需要存入的數據(尾插法):" << endl;CreateList(LA, n);//函數的聲明cout << "單鏈表A為:";display(LA);LC = new LNode;LC->next = NULL;//必須保證所創造的空間為空VerList_L(LA, LC);display(LC);return 0;
}
此對應的就是:主函數的代碼。
- 首先就是創建一個新的鏈表,也就是對GeateList(LA,n)進行聲明和調用。則代碼為:
//創建鏈表
int CreateList(LinkList &L,int n)
{LNode* p, * r;int i;L = new LNode;//新建一個空間L->next = NULL;//指向空指針r = L;for (i = 0; i < n; i++){p = new LNode;cin >> p->data;p->next = NULL;r->next = p;r = p;}return 0;
}
- 接下來就是:輸出鏈表,則代碼為:
? ? ? ?
//輸出鏈表
void display(LinkList L)
{LNode* p;p = L->next;cout << "(";while (p){cout << p->data << "";p = p->next;cout << ")" << endl;}}
- 最后一步,逆轉,則代碼為:
//逆轉
int VerList_L(LinkList &LA,LinkList &LC)
{LNode* pa;LNode* pc;pa = LA->next;pc = LC;while (pa){pc = pa;pa = pa->next;pc->next = LC->next;LC->next = pc; //插入到表頭}delete LA;
}
- 這個就是這道題目的解題過程,如有錯,請君指點。