可能重複:
debug help - swap 2 nodes of double link listC++ LinkedList的交換節點
我試圖寫一個算法,可以在一個單鏈表在C++交換兩個節點。這是我到目前爲止有:
void swap(ListNode *node1, ListNode *node2)
{
ListNode *prev1 = head;
ListNode *prev2 = head;
//Search previous node for node1:
while(prev1->next!=node1 || prev1 != node1)
prev1 = prev1->getNext();
//Search previous node for node2:
while(prev2->next!=node2 || prev2 != node2)
prev2 = prev2->getNext();
if(node1->next==node2)
{ //This means node1 == prev2?
tail = node1;
node1->next = NULL;
head = node2;
node2->next = node1;
}
else if(node2->next==node1)
{ // node2 == prev1
tail = node2;
node2->next = NULL;
head = node1;
node1->next = node2;
}
if(node1->next == NULL)
{ //node1 is last
node1->next = node2->next;
tail = node2;
node2->next = NULL;
prev1->next = node2;
prev2->next = node1;
}
}
但我意識到,我可以得到的,就像如果有LL只有兩個元素的不同案件的數量,或者如果他們給我們點2點1,等等等等,我之前意識到它不可能是複雜而醜陋的。那麼如何編寫一個交換兩個節點的算法呢?
什麼是* *的具體問題? – 2012-03-04 16:13:27
我們不會在堆棧溢出(這不是網絡論壇或留言板)上「提供一些提示」。我們回答有關編程語言的具體問題。 – 2012-03-04 16:13:51
「如何交換鏈接列表中的兩個節點」聽起來像是一個非常合法和具體的問題,雖然是重複的。 – tenfour 2012-03-04 16:19:37