1. 程式人生 > >單向連結串列的基本運算

單向連結串列的基本運算

//

//  main.cpp

//  單向連結串列的基本運算

//  Created by 柯木超 on 2018/11/27.

//  Copyright © 2018 柯木超. All rights reserved.

//

#include <iostream> 

typedef struct Node{

    int data;

    struct Node *next;

}linkNode, *link;

 

link createNode() {

    

    // 先宣告,然後再賦值, T記錄頭節點,M 記錄當前移動節點,P是當前輸入節點

    link T,P,M;

    

    // 1、給頭節點開闢新的記憶體空間

    T = (link)(malloc(sizeof(linkNode)));

    M = T;

    for (int a=0;a<10;a++) {

        P = (link)(malloc(sizeof

(linkNode)));

        P->data = a;

        P->next = NULL;

        M->next = P;

        M = P; //M記錄當前移動節點

    }

    return T;

}

 

link insertNumber(int data,int number, link L) {

    int length = 0;

    // 獲取當前連結串列長度

    link m = L;

    while (m->next!=NULL) {

        length = length+1;

        m = m->next;

    }    

    if (number >= length){

        printf("插入位置超出連結串列總長度");

    }else {

        int i = 0;

        while (i < number) {

            L = L->next;

            i = i+1;

        }

        link next = L->next;

        link newNode = (link)malloc(sizeof(linkNode));

        newNode->data = data;

        L->next = newNode; // 斷開連結串列插入新的節點

        newNode->next = next; //和新的節點重新連線

    }

    return L;

}

 

link deleteNumber(int number, link L) {

    int length = 0;

    // 獲取當前連結串列長度

    link m = L;

    while (m->next!=NULL) {

        length = length+1;

        m = m->next;

    }

    if (number >= length){

        printf("刪除位置超出連結串列總長度");

    }else {

        int i = 0;

        while (i < number) {

            L = L->next;

            i = i+1;

        }

        link next = L->next;

        L->next = next->next;

        free(next);

    }

    return L;

}

 

void printNode(link L){

    while (L->next != NULL) {

        L = L->next;

        printf("%d", L->data);

    }

    printf("\n");

}

 

int main(int argc, const char * argv[]) {

    // 建立連結串列

    link L;

    L = createNode();

    // 列印連結串列

    printNode(L);

    // 插入資料

    insertNumber(100, 4, L);

    // 列印連結串列

    printNode(L);

    // 刪除資料

    deleteNumber(4, L);

    // 列印連結串列

    printNode(L);

    return 0;

}