【c++程序】链表前插、插入和后插

#include
using namespace std;

typedef int T;

struct Node
{
	T data;
	Node* next;
	//d=T()零初始化,建个匿名对象不传参数
	Node(const T& d=T()):data(d),next(0){}
};
class list
{
	Node* head;//头指针,用来保存头节点的地址
	int len;
public:
	list():head(NULL),len(0){}

	//前插
	void push_front(const T& d)
	{
	/*	Node* p=new Node(d);
		p->next=head;
		head=p;*/
		insert(d,0);
	}

	//后插
	void push_back(const T& d)
	{
		insert(d,size());
	}

	int size()const
	{
		return len;
	}
	//空间换时间
	/*int size()const
	{
		int cnt=0;
		Node* p=head;
		while(p!=NULL)
		{
			++cnt;
			p=p->next;
		}
		return cnt;
	}*/

	//找链表中指向指定位置的指针
	Node* & getptr(int pos)
	{
		if(pos<0||pos>size()) pos=0;
		if(pos==0) return head;
		Node* p=head;
		/*1:return (*p).next;
		2:p=p->next; return (*p).next;
		3:p=p->next;p=p->next; return (*p).next;*/
		for(int i=1;inext;
		}
		return (*p).next;

	
	}

	//插入任意位置
	//1.在链表里找到指向那个位置的指针pn
	//2.让新节点的next跟找到的那个指针指向同一个地方
	//3.让找到的指针指向新节点
	void insert(const T& d,int pos)
	{
		Node*& pn=getptr(pos);
		Node* p=new Node(d);
		p->next=pn;
		pn=p;
		++len;
	}
	
	//遍历
	void travel()const 
	{
		Node* p=head;
		while(p!=NULL)
		{
			cout<data<<' ';
			p=p->next;
		}
	}

	//清空链表
	void clear()
	{
		while(head!=NULL)
		{
			Node* p=head->next;
			delete head;
			head=p;
		}
	}
	~list()
	{
		cout<

你可能感兴趣的:(c++程序)