2014-03-24 163 views
0

我想插入2到4和4到2.我得到的swop錯誤。我將如何修復下面的代碼來獲得swop。C++鏈接列表插入swop

#include <iostream> 

struct nodeType 
{ 
    int info ; 
    nodeType* link ; 
}; 

int main() 
{ 
    nodeType* ptr ; 
    nodeType* list ; 

    ptr = new nodeType; 
    ptr->info = 1; 
    list = new nodeType; 
    ptr->info = 2; 
    list->link = ptr; 
    ptr = new nodeType; 
    ptr->info = 3; 
    ptr = new nodeType; 
    list->info = 4; 
    ptr->link = NULL; 
    list->link->link->link = ptr; 

    unsigned count = 1 ; 
    ptr = list ; 
    while (ptr) 
    { 
     std::cout << "Node #" << count++ << ':' << ptr->info << '\n' ; 
     ptr = ptr->link ; 
    } 
} 

我試過各種方法來使swop發生,但我得到編譯器錯誤。 由於

+0

「我收到編譯器錯誤」...總是複製編譯器錯誤請... – hivert

+0

而不是ptr-> info = 2;我認爲你的意思是list-> info = 2; –

+0

你似乎誤解了指針的工作原理。我建議你先嚐試一些更簡單的方法,比如構建兩個節點並將一個節點連接到另一個節點。 – Beta

回答

0
nodeType* ptr ; 
nodeType* list ; 

ptr = new nodeType; 
ptr->info = 1; 

指針ptr現在指向包含1的節點。

list = new nodeType; 
ptr->info = 2; 

現在list指向一個節點,並ptr指向包含2節點。

list->link = ptr; 

現在一個節點連接到另一個節點。

ptr = new nodeType; 
ptr->info = 3; 

現在ptr點到另一個節點,含有3

ptr = new nodeType; 

現在ptr另一節點,包含3節點已丟失。

list->info = 4; 

現在在列表中的第一個節點包含4

ptr->link = NULL; 

好的。

list->link->link->link = ptr; 

現在,您正試圖遍歷列表的末尾(它只有兩個節點)。您取消引用無效指針,這會導致未定義的行爲;如果你得到的是訪問違規錯誤,那麼你很幸運。

在嘗試在列表中間進行交換之前,您必須先學習一些指針。

+0

@ user1291092在鉛筆和紙上繪製圖片1)預期的節點和列表交互。 2)代碼在節點和列表上的操作(例如,在修改代碼之前,該圖不會與1中的圖片相匹配)。 –