7,單鏈表交換任意兩個元素(不包括表頭)

2021-06-09 18:38:10 字數 1247 閱讀 3385

思路:

有兩種情況,相鄰和不相鄰。

首先找兩個節點的前驅,可以通過前驅來判斷是否相鄰。

相鄰則改變3個結點的next指標,不相鄰則改變4個結點的next指標。

注意:

要判斷許多出錯的情況,比如,結點不在表中,結點為空,表為空等。

// linktable.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include using namespace std;

//鍊錶的結構體

struct node

;//建立鍊錶

struct node * create( string & str_link )

return phead;

}//輸出鍊錶

void out_link( struct node * phead )

cout << endl;

}//找到第index個元素

struct node * find_node(struct node* phead, int index )

return pnode;

}//找前驅節點

struct node* find_prenode( struct node* phead, struct node* pnode)

return null;

}//交換節點

void exchange_node( struct node* phead, struct node* pnode1, struct node* pnode2)

if( ppre1 == pnode2)

if( ppre2 == pnode1 || ppre1 == pnode2 )

else }

void test()

{ string str;

cin >> str;

struct node *phead = create( str );

int index;

cin >> index;

struct node * pnode1 = find_node( phead, index );

cin >> index;

struct node * pnode2 = find_node( phead, index );

exchange_node( phead, pnode1, pnode2 );

cout << "after exchange: "<

鍊錶 兩個單鏈表求差集

問題描述 已知集合a和b的元素分別用不含頭結點的單鏈表儲存,函式difference 用於求解集合a與b的差集,並將結果儲存在集合a的單鏈表中。例如,若集合a 集合b 完成計算後a 鍊錶結點的結構型別定義如下 struct node 請完成函式void difference node la node...

兩個單鏈表生成相加鍊錶

題目 假設鍊錶中每乙個節點的值都在0 9之間,那麼鍊錶整體就可以代表乙個整數。例如9 3 7,代表937.給定兩個這種鍊錶的頭節點head1和head2,請生成代表兩個整數相加值的結果鍊錶。例如 9 3 7和6 3,相加結果為1 0 0 0 兩個單鏈表生成相加鍊錶 方法1 利用棧結構求解 publi...

兩個單鏈表生成相加鍊錶

題目 假設鍊錶中每乙個節點的值都在0 9之間,那麼鍊錶整體就可以代表乙個整數。例如 9 3 7,可以代表整數937.給定兩個兩個這種鍊錶的頭結點head1和head2,請生成代表兩個整數相加值的結果鍊錶。例如 鍊錶1為9 3 7,鍊錶2為6 3,最後生成新的結果鍊錶為1 0 0 0。public c...