交換兩個鍊錶節點

2021-08-28 03:27:47 字數 964 閱讀 9367

在鍊錶有關的問題當中,鍊錶節點交換是乙個非常 典型的一道題目,先給**,後總結。

#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...