C ++リスト体操

まず、基本的な操作のリスト

リストを定義します。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;
}

 

二、链表的应用

 

おすすめ

転載: www.cnblogs.com/whdsunny/p/12563656.html