1
我試圖變得更容易與指針。所以,爲了好玩,我採取了以下C++函數,圍繞分隔值指針指針:分區鏈接列表
void partitionList(lnode<int> *& head, int val) {
lnode<int> * front = nullptr;
lnode<int> * back = nullptr;
lnode<int> * curr = head;
while (curr) {
lnode<int> * next = curr->next;
if (curr->data < val) {
curr->next = front;
front = curr;
} else {
curr->next = back;
back = curr;
}
curr = next;
}
curr = front;
while (curr->next) {
curr = curr->next;
}
curr->next = back;
head = front;
}
一個鏈表,我試圖改變它採取C風格的雙指針來代替。我做了一個無意識的發現替換,這沒有奏效。尋找到它,我發現我的問題的根源,但我還是真的不明白這是怎麼回事...
void partitionList(lnode<int> ** head, int val) {
lnode<int> * front = nullptr;
lnode<int> * back = nullptr;
lnode<int> ** curr = head;
while (*curr) {
lnode<int> * entry = *curr;
std::cout << (*curr)->data << std::endl; // On second loop, prints 2
std::cout << entry->data << std::endl; // On second loop, prints 2
lnode<int> * next = entry->next; // This assignment does something
std::cout << entry->data << std::endl; // On second loop, prints 2
std::cout << (*curr)->data << std::endl; // On second loop, prints 3!
if ((*curr)->data < val) {
(*curr)->next = front;
front = *curr;
} else {
(*curr)->next = back;
back = *curr;
}
curr = &next;
}
*curr = front;
while ((*curr)->next) {
(*curr) = (*curr)->next;
}
(*curr)->next = back;
head = &front;
}
int main() {
lnode<int> * tail = new lnode<int>(8, nullptr);
lnode<int> * seven = new lnode<int>(7, tail);
lnode<int> * six = new lnode<int>(6, seven);
lnode<int> * five = new lnode<int>(5, six);
lnode<int> * four = new lnode<int>(4, five);
lnode<int> * three = new lnode<int>(3, four);
lnode<int> * two = new lnode<int>(2, three);
lnode<int> * head = new lnode<int>(1, two);
partitionList(&head, 6);
}
在第一循環中,調試打印線的所有四個附近的頂部函數的while循環打印「1」。但是,在第二個循環中,它們打印「2」,「2」,「2」,「3」?
任何人都可以解釋發生了什麼?什麼是使用雙指針而不是對指針的引用的正確方法?
謝謝!
這是有道理的,但我仍然不明白打印輸出發生了什麼。爲什麼要這樣做改變'(* curr) - > data'的值而不是'entry-> data'?爲什麼要這樣做 'lnode * next = entry-> next;' –
piyo
2013-05-14 15:49:07
因此:curr = &next;這裏「curr」變量得到局部變量「next」和next = entry-> next的地址;將修改curr。所以用* curr = next替換curr = &next;; – 2013-05-14 16:16:57
啊,現在我想我明白了。我明白了,我明白了。謝謝! – piyo 2013-05-17 14:32:09