设单链表L中的结点按data域数值递减排列,设计算法将L中的结点按data域数值递增排列
在这里插入代码片
#include<iostream>
#pragma warning(disable:4996)
using namespace std;
template<class T>
struct Node
{
T data;
Node<T>* next;
};
template<class T>
class LinkList
{
Node<T>* head;
public:
LinkList();//建立只有一个头结点的单链表
LinkList(T a[], int n); //建立有n个元素头结点的单链表
~LinkList();
void opo(LinkList& l1);
};
template<class T>
LinkList<T>::LinkList(T a[], int n)
{
head = new Node<T>;
Node<T>* tail = head;
//尾插
for (int i = 0; i < n; i++)
{
Node<T>* s = new Node<T>;
s->data = a[i];
tail->next = s;
tail = s;
}
tail->next = NULL;
}
template<class T>
LinkList<T>::~LinkList()
{
if (!head)
delete head;
}
template<class T>
void LinkList<T>::opo(LinkList& l1)
{
Node<T>* p1 = l1.head;
Node<T>* pre, * temp = new Node<T>;
pre = NULL;
while (p1 != NULL)
{
temp = pre;
pre = p1;
p1 = p1->next;
pre->next = temp;
}
Node<int>* p = new Node<T>;
p = pre;
while (p->next)
{
if (p->next == NULL)
cout << p->data << endl;
else
cout << p->data << " ";
p = p->next;
}
}
int main()
{
int n1;
cout << "请输入链表S1中元素的个数:";
cin >> n1;
int* a1 = new int[n1];
cout << endl << "请依次输入链表S1中的元素:";
for (int i = 0; i < n1; i++)
cin >> a1[i];
cout << endl << "对链表中的元素进行逆序操作并输出: ";
Node<int>* p, * head;
LinkList <int>s1(a1, n1);
s1.opo(s1);
return 0;
}