單向連結串列的基本運算
//
// 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
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;
}