まず、基本的な操作のリスト
リストを定義します。1.
構造体ListNode {
int型のval;
ListNode *次回、*最後。
ListNode(INT X):ヴァル(x)は、次の(NULL)、最後に(NULL){}
}。
2.(長さnの)ベースリストを作成
* Create_normal_list ListNode(INT N-){ ListNode *ヘッド、通常*、* END; // ヘッドノード、中間ノード、終了ノード(ノード現在最終)を作成 ヘッド=新しい新しいListNode(0); //は、メモリ割り当て 端を=ヘッド; // 現在のテール・ノードがヘッドノードである ため(INT I = 1 ; I <= N; I ++ ){ 正常 =新しい新しいListNode(0); //は、中間ノードを構築し 、END->次=正常// テール・ノードノードが中間ノードである ;>最後=エンド-正常// テール・ノードの前のノードが中間ノードである エンド=正常; // テイルノードに移動するために戻って、現在の中間ノードへ } エンド - >次に= NULL; //最後に、新しい空のアドレスの終点ノード 頭部>最終= NULL; // 元ヘッドノードが存在しない リターン・ヘッドと、 }
循環リンクリストを作成3。
テール・ノードのリストがあり、ヘッドノード、リングに達します
ListNode * create_circle_list(int型のN-){
ListNode *ヘッド、*ノーマル、* END;
ヘッド =新新ListNode(0);
エンド = ヘッド;
のため(int型 I = 1。 ; I <= N; I ++ ){
ノーマル =新新ListNode( 0);
エンド - >次= 正常;
ノーマル - >最終= END;
エンド = 正常;
}
エンド - >次=ヘッド; // 次のノード点ヘッドエンドノードへの
頭部>最後= END; // ヘッド尾の前にノードを指し示す
リターンヘッド。
}
変更されたデータの前記Aリスト
リストxの最初のリストのn個の位置の値
void change_value(ListNode* list,int n,int x){
ListNode* p=list;
for(int i=0;i<n;i++){ //移动到第n个位置
p=p->next;
}
p->val=x; //修改值
}
5.删除节点
相当于将这个位置抠掉,前一个节点的next指向p节点的后一个,后一个节点的last指向p节点的前一个
void delete_point(ListNode* list,int n){
ListNode* p=list;
for(int i=0;i<n;i++){ //移动到第n个位置
p=p->next;
}
p->last->next=p->next; //将节点p的前一个节点的后一个节点指向p的后一个节点
p->next->last=p->last; //将节点p的后一个节点的前一个节点指向p的前一个节点
free(p); //删除p这个节点
}
6.插入节点
在链表list的第n个位置的后面插入一个新节点
void insert_point(ListNode* list,int n,int x){ //在第n个位置后面插入新节点
ListNode* p=list;
for(int i=0;i<n;i++){ //移动到第n个位置
p=p->next;
}
ListNode* now; //新建一个节点
now=new ListNode(0); //分配内存
now->val=x; //新节点的值为x
now->next=p->next; //新节点的后一个节点是p节点原本的后一个节点
now->last=p; //因为插入在p节点后面,新节点的前一个节点是p节点
p->next->last=now; //p节点的后一个节点,它的前一个节点变成新节点
p->next=now; //p节点的后一个节点变成新节点
}
7.查找节点
ListNode* search_point(ListNode* list,int n){
ListNode* p=list;
for(int i=0;i<n;i++){
p=p->next;
}
return p;
}
二、链表的应用