在带头结点的单链表上实现插入操作
#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;
}
运行结果: