如圖所示 單項鏈表節點有兩個域:指標域與資料域 定義如下:
typedef int dataType;class node {friend class nodeList; private:dataType data; //資料域node* link; //指標域 一個指向下一個元素的指標};
同時擁有一個節點鏈表用來儲存資料:定義如下
class nodeList {private:node* first; //前端節點指標public:nodeList() { first = 0; }void add(dataType num); //從鏈表頭部按順序添加void insertTail(dataType num); //串連到尾部void mediumInsert(dataType num, int pos);void Delete(dataType num); //刪除一個值void show();};
通過指標遍曆整個鏈表:
void nodeList::show() {node* p = new node(); p = first; //指向第一個節點while (p != NULL) {dataType temp = p->data;cout << temp << " ";p = p->link; //資料迭代}cout << endl;}
增加一個新的節點:
void nodeList::add(dataType num) {node* newNode = new node(); //建立一個新節點newNode->data = num; newNode->link = first; //新節點的指標域指向下一個節點first = newNode; //新的節點標記為前端節點}
插入到尾部:
void nodeList::insertTail(dataType num) {//新的節點node* newNode = new node();newNode->data = num;//用來遍曆node* p = new node(); p = first;while (p->link != NULL) {p = p->link;}newNode->link = p->link; //尾部插入法p->link = newNode;}
中間插入和尾部插入沒什麼區別 只是迭代到指定的位置然後進行插入操作
//中插void nodeList::mediumInsert(dataType num, int pos) {node* newNode = new node();newNode->data = num; node* p = new node();p = first;int k = 1; //標記節點位置
while (p->link != NULL && k < pos - 1) {p = p->link;k++;}newNode->link = p->link; p->link = newNode; }
刪除操作:
void nodeList::Delete(dataType num) {node* p = new node(); //第一個指標node* q = new node(); //第二個指標p = first;q = NULL;if(p == NULL){ return;}if (p->data == num) { //判斷首個節點是不是要刪除的節點first = first -> link;
delete p; //刪除節點return; }else {//開始進行遍曆while (p != NULL) {q = p; //q = q->link;if (q->data == num) {p->link = q->link;delete q;break;}p = p->link;}}}