单链表最大元素作表尾结点
Description
有一个带头结点的无序单链表(表中无重复元素),在链表中找到最大元素的结点,将其插入到链表的表尾作为尾结点,假设单链表中的元素值均为正整数,建立链表时,输入-1时停止创建新结点。要求:定义一个独立函数(即非类的成员函数)实现。
Input
输入若干个正整数(无重复),各个整数之间用空格分开,最后输入-1。
Output
输出整个链表,具体格式见Sample Output。
Sample Input
7 2 4 5 8 1 -1
Sample Output
7-->2-->4-->5-->1-->8
代码如下:
#include "iostream"
using namespace std;
struct LinkNode
{
int data;
LinkNode* link;
};
class List
{
public:
List()
{
head = new LinkNode;
head->link = NULL;
}List(int x)
{
head = new LinkNode;
head->data = x;
head->link = NULL;
}
~List()
{
}
bool creat(int x)
{
if (head == NULL)
return false;
LinkNode* current;
current = head;
LinkNode* newNode = new LinkNode;
newNode->data = x;
while (current != NULL)
{
if (current->link == NULL)
{
current->link = newNode;
newNode->link = NULL;
break;
}
else
{
current = current->link;
}
}
return true;
}
bool search_k(int k, int& num)
{
LinkNode* left, * right;
left = head;
right = head;
int count = 0;
left = left->link;
while (count < k)
{
right = right->link;
if (right == NULL)
{
return false;
}
count++;
}
while (right != NULL)
{
if (right->link == NULL)
{
num = left->data;
return true;
}
right = right->link;
left = left->link;
}
}
void max_change()
{
LinkNode* current = head;
LinkNode* Max = head;
while (current->link != NULL)
{
if ((current->link)->data > (Max->link)->data)
{
Max = current;
}
current = current->link;
if (current->link == NULL)
{
if (Max->link == current)
{
continue;
}
else
{
LinkNode* t = Max->link;
Max->link = t->link;
current->link = t;
t->link = NULL;
current = current->link;
}
}
}
}
void display()
{
LinkNode* p = head;
p = p->link;
while (p != NULL)
{
if (p->link != NULL)
{
cout << p->data << "-->";
}
else
{
cout << p->data << endl;
}
p = p->link;
}
}
private:
LinkNode* head;
};
int main()
{
List SingleList;
int num;
while (cin >> num && num != -1)
{
SingleList.creat(num);
}
SingleList.display();
SingleList.max_change();
SingleList.display();
return 0;
}