题目描述
建立一个升序链表并遍历输出。
输入描述:
输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。
输出描述:
可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。
示例1
输入
4 3 5 7 9
输出
3 5 7 9
这题可以简单的记录n个数,sort一下输出即可。
这里写了一个按升序建立链表的过程,主要思想是通过两个指针p,q,p为head->next,q为head。
建立循环,如果p不为空,且输入的值大于p->data,将p,q向后移动,直到p为空或输入值小于p->data.
此时建立一个新结点插在p,q之间即可。
#include <iostream>
#include <string.h>
#include <string>
#include <algorithm>
#include <stdio.h>
using namespace std;
class Node
{
public:
int data;
Node* next;
Node(int aData)
{
this->data = aData;
next = NULL;
}
};
void Insert(Node *root,int a)
{
}
int main()
{
int n,i;
int temp;
cin>>n;
Node *p,*q;
Node *head = new Node(-1);
q = head;
p=head->next;
for(i=0;i<n;i++)
{
cin>>temp;
if(p == NULL)
{
Node *newNode = new Node(temp);
q->next = newNode;
}
else
{
while(p!=NULL && temp > p->data)
{
q = p;
p = p->next;
}
Node *newNode = new Node(temp);
q->next = newNode;
newNode->next = p;
}
p = head->next;
q = head;
}
p=head->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
return 0;
}