昨天刷题发现链表实现有些模糊了,就简单实现了下
#include "stdafx.h"
#include <iostream>
using namespace std;
template<class T>
class listNode{
public :
T data;
listNode *next; //指向下一个节点的指针
listNode(){
next = NULL;
}
};
template <class T>
class mylist{
private:
unsigned int listLength;
listNode<T> *node, *headNode, *lastNode;
public:
mylist();
void addList(T x);
void printList();
void deleteNode(T x); //删除值为x的节点
};
// 初始化
template <class T>
mylist<T> ::mylist(){
listLength = 0;
node = NULL;
headNode = NULL;
lastNode = NULL;
}
//增加元素
template <class T>
void mylist<T>::addList(T x){
node = new listNode<T>();
node->data = x;
if (headNode == NULL){
headNode = node;
lastNode = node;
}
else{
lastNode->next = node;
lastNode = node;
}
listLength++;
}
//删除第一个值为x的节点
template <class T>
void mylist<T>::deleteNode(T x){
listNode<T> *temp = headNode;
if (headNode == NULL) return;
if (headNode->data == x){//如果是头节点
if (headNode->next == NULL)//如果只有一个节点
{
lastNode = NULL;
headNode = NULL;
delete(temp);
}
else
{
headNode = headNode->next;
temp->next = NULL;
delete(temp);
}
listLength--;
return;
}
while (temp->next != NULL && temp->next->data != x)
{
temp = temp->next;
}
if (temp->next == NULL) return;
if (temp->next == lastNode){ //如果是尾节点
lastNode = temp;
lastNode->next = NULL;
delete(temp->next);
listLength--;
}
else
{
node = temp->next;
temp->next = node->next;
node->next = NULL;
delete(node);
listLength--;
}
}
//打印
template<class T>
void mylist<T>:: printList(){
node = headNode;
while (node != NULL){
cout << node->data << endl;
node = node->next;
}
cout << "geshu" << listLength << endl;
}
void main(){
mylist<int> l;
l.addList(2);
l.addList(3);
l.addList(4);
l.printList();
l.deleteNode(3);
l.printList();
system("pause");
}