链表
双重指针的理解加深
#include <iostream>
using namespace std;
typedef int ElemType;
// define node Structure
typedef struct node{
ElemType data;
struct node* next;
} Node;
// function statement
bool initLink(Node**);
bool addElemNode(Node*, ElemType);
int getLength(Node*);
void traverseList(Node*);
int main(){
Node* headPoint = NULL;
initLink(&headPoint);
if (headPoint == NULL) cout << "is null" << endl;
cout << headPoint->data << endl;
addElemNode(headPoint, 1);
addElemNode(headPoint, 1);
addElemNode(headPoint, 1);
addElemNode(headPoint, 1);
traverseList(headPoint);
return 0;
}
// init LinkList sign***
bool initLink(Node** node){
*node = new Node;
if (node == NULL) {cout << "init fail!" << endl; exit(-1);}
(*node)->data = -1;
(*node)->next = NULL;
return true;
}
//add Element node
bool addElemNode(Node* node, ElemType value){
Node* lastNode = node;
while (lastNode->next != NULL) lastNode = lastNode->next;
Node* newNode = new Node;
if (newNode == NULL) {cout << "add fail" << endl; exit(-1);}
newNode->data = value;
newNode->next = NULL;
lastNode->next = newNode;
return true;
}
// get link length
int getLength(Node* node){
Node* pNode = node->next;
int length = 0;
while (pNode != NULL){
length++;
pNode = pNode->next;
}
return length;
}
void traverseList(Node* node) {
Node* pNode = node->next;
while (pNode != NULL){
cout << "data:" << pNode->data << endl;
pNode = pNode->next;
}
}
注: 要修改的是 头指针的内容 所以是双重指针