在带头结点的单链表上实现插入操作

#include<iostream>
using namespace std;

struct	Node
{
	int data;
	Node* next;
};

class LinkList
{
public:
	LinkList(int a[], int n);
	void printlist();
	void Insert(int i, int x);
	Node *p;
private:
	Node * first;
};

LinkList::LinkList(int a[], int n)
{
	Node* r;
	Node* s;
	first = new Node;
	r = first;
	for (int i = 0; i<n; i++)
	{
		s = new Node;
		s->data = a[i];
		r->next = s;
		r = s;
	}
	r->next = NULL;
}

void LinkList::printlist()
{
	Node *p;
	p = first->next;
	while (p != NULL)
	{
		if (p->next == NULL)
		{
			cout << p->data ;
			p = p->next;
		}
		else
		{
			cout << p->data << "-> ";
			p = p->next;
		}
	}
	cout << endl;
}
void LinkList::Insert(int i, int x)
{
	Node *s; int count = 0;
	p = first->next;
	while (p != NULL && count < i-1)
	{
		p = p->next;
		count++;
	}
	//if (p == NULL)throw "位置";
	//else
	//{
		s = new Node;
		s->data = x;
		s->next = p->next;
		p ->next = s;
	//}
}
int main()
{
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	LinkList obj(a, 10);
	cout << "原链表:"; obj.printlist();
	cout << endl;
	cout << "要插在第几位后?    ";
	int place,num;
	cout << "第"; cin >> place;
	cout << "请输入要插入的数据:";
	cin >> num;
	obj.Insert(place, num);
	cout << endl << "新链表:"; obj.printlist(); cout << endl;

	system("pause");
	return 0;
}

运行结果:
在带头结点的单链表上实现插入操作