链表 C++ 简单练习

昨天刷题发现链表实现有些模糊了,就简单实现了下

#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");
}


猜你喜欢

转载自blog.csdn.net/u013277456/article/details/77839086
今日推荐