在鍊錶有關的問題當中,鍊錶節點交換是乙個非常 典型的一道題目,先給**,後總結。
#include using namespace std;
struct node
};node *create(int n,int *data)
return head;
}void display(node *head)
cout << endl;
}node *findprenode(node *head,int preorder)
return prenode;
}node *findnextnode(node *head, int nextorder)
return nextnode;
}void swap(node *head, int preorder1, int nextorder1,int preorder2,int nextorder2)
int main()
int preorder1 = order1 - 1;
int nextorder1 = order1 + 1;
int preorder2 = order2 - 1;
int nextorder2 = order2 + 1;
if (preorder1<0 || nextorder1>n || preorder2<0 || nextorder2>n)
else
}}
思路是先建立乙個鍊錶,這裡有個小技巧,就是建立乙個帶有頭節點的鍊錶(這樣做可以避免很多特殊情況),然後有些輸入是錯誤的(節點數小於0或,大於總長度的情況),然後就是找到想交換的節點的前後節點,就是找到4個節點,然後畫圖,,畫圖,畫圖(重要的事情說3遍),然後連線。
只要涉及到swap,也就是交換,就是考慮乙個很容易掉進坑里的問題,會容易出現a=b,b=a這種情況,這個**注釋掉的部分就是犯了這樣的錯誤,然後引入了tmp,然後解決了這個問題。
交換鍊錶當中兩個節點
給你乙個鍊錶以及兩個權值v1和v2,交換鍊錶中權值為v1和v2的這兩個節點。保證鍊錶中節點權值各不相同,如果沒有找到對應節點,那麼什麼也不用做。注意事項 你需要交換兩個節點而不是改變節點的權值 找到這兩個結點的前驅節點 node1prev node1 node2prev node2 node2nex...
LintCode 交換鍊錶當中兩個節點
給你乙個鍊錶以及兩個權值v1和v2,交換鍊錶中權值為v1和v2的這兩個節點。保證鍊錶中節點權值各不相同,如果沒有找到對應節點,那麼什麼也不用做。注意事項 你需要交換兩個節點而不是改變節點的權值 您在真實的面試中是否遇到過這個題?yes 樣例給出鍊錶1 2 3 4 null,以及v1 2,v2 4 返...
LintCode 交換鍊錶當中兩個節點
交換鍊錶當中兩個節點 描述 給你乙個鍊錶以及兩個權值v1和v2,交換鍊錶中權值為v1和v2的這兩個節點。保證鍊錶中節點權值各不相同,如果沒有找到對應節點,那麼什麼也不用做。注意事項 你需要交換兩個節點而不是改變節點的權值 樣例給出鍊錶 1 2 3 4 null 以及 v1 2 v2 4 返回結果 1...