1樓:匿名使用者
筆誤吧,
第一條交換的 previousnode = p->prev; 改為 p = previousnode->next;
函式送入的previousnode 一定是被交換兩個節點的父節點。就是下面說的鍊錶中的1。
你的**裡中previousnode上來就賦為p->prev了,此時p還沒有值(為0或隨機值),後面的所有操作都是錯的,訪問了不可訪問的位址,除錯自然會報錯。
/*鍊錶 1 2 3 */
/*交換2、3 */
/*p = 2*/
position beforep, afterp;
/*befor = 1*/
beforep = p->prev;
/*after = 3*/
afterp = p->next;
/*2的下乙個 = 3的下乙個*/
p->next = afterp->next;
/*1的下乙個 = 3*/
beforep->next = afterp;
/*3的下乙個 = 2*/
afterp->next = p;
/*2的下乙個的前乙個 = 2*/
p->next->prev = p;
/*2的前乙個 = 3*/
p->prev = afterp;
/*3的前乙個 = 1*/
afterp->prev = beforep;
c++ 單鏈表的建立與輸出 程式求改錯
2樓:匿名使用者
0 21 3 411 23 78 66 544 8q0 21 3 411 23 78 66 544 8press any key to continue#include
using namespace std;
struct number ;
struct number *creat()p->next = null;
return head;
}void print(struct number *head)cout << endl;
}int main()
3樓:
struct number*creat()p2->next=null;
return(head);
}注意輸入cin在迴圈中,改為取得-1時停止
4樓:銜泥無珮
cin缺省會拋棄空白字元,讀不進回車的
c++改錯(鍊錶插入)
5樓:匿名使用者
1.將新結點插入鏈頭
void linkedlist::insert(int a)2.將新結點插入鏈尾
void linkedlist::insert(int a)t = new node(a);
p->next = t
t->next = null;
tail = t;}
6樓:匿名使用者
沒縮排不能怪提問者,只能怪系統沒這功能,是系統吃掉了空格。
void linkedlist::insert(int a)
7樓:匿名使用者
編譯什麼報錯啊?~
知道沒縮排..看得很累人的!
c語言鍊錶檔案讀取問題,c語言鍊錶檔案讀取問題
問題就在於你存這個結構體的時候,把struct std pnext也存進去了,但這個pnext下次讀出來的時候可能是乙個無效的位址,沒看到insert函式是如何實現的,是否對這個值進行了處理,否則用這個指標做為鏈的話肯定出錯。p0指向鍊錶中最後乙個節點,讀到檔案結尾時,feof返回1,於是執行if語...
C語言鍊錶程式題,C語言鍊錶程式題!!!
用兩個變數暫存最大最小值然後遍歷鍊錶比較暫存的最大最小值不就可以了,你這懸賞也太少了 c語言鍊錶題目 比較簡單 求大神幫我寫一下!急!int sort link data op list else q q next p p next return 0 int sort link data op li...
c語言煉表頭結點問題,C語言 煉表頭結點問題!!
頭節點,實際應用的時候,不僅起標誌性作用,還可以記錄一些鍊錶的相關資訊,比如鍊錶當前長度,最大長度等等,便於操作和控制。比如 鍊錶啟用開關,可以做刪除整條鍊錶的控制。游標,便於插入和刪除資料。鍊錶資料區提示資訊,提示此煉表是存放那些資料的,格式如何。帶頭結點麼,則對其它的每個結點,都是一樣的,主要有...
c 鍊錶棧問題
在要求上是說要模擬stl stack的話,這個就比較麻煩了,咱先說一下怎麼建立乙個普通棧。業界慣例的抿了一口咖啡之後,我們拿起筆來 1.建立抽象模型,說起來這件事得追溯到c 本身的結構上 從廣義上看,類是乙個資料操作集合體,即使資料結構也不外乎如是。那麼我們必須知道棧需要什麼 這是一切問題的起點。資...
鍊錶有什麼用,c語言鍊錶的用途是什麼
鍊錶是動態的進行儲存分配的一種結構。我們知道,用陣列存放資料時,必須事先定義固定的長度 即元素個數 如果事先難以確定元素個數,則必須把陣列定義的足夠大,以便存放,顯然這樣會浪費記憶體。而鍊錶可根據需要開闢記憶體單元,不會浪費記憶體。鍊錶有乙個 頭指標 變數,它存放乙個位址,該位址指向乙個元素,這個元...