PAT 1052 Linked List Sorting

发布于:2025-08-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

在这里插入图片描述
在这里插入图片描述
这一题的意思是让给出的链表按照每个节点的值的大小排序,按照升序排,
很容易想到直接用sort依据值进行排序即可。但要注意的是给出的节点,可能不都是在一个链表上的,有可能有孤立的节点,因此我们应该先对链表进行从头到尾的遍历一遍,找到在链表上有多少个节点。

#include <iostream>
#include <limits.h>
#include <cstring>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
int N;
int startaddress;
int endaddress;
struct node
{
	int address;
	int key;
	int next;
}linklist[100005];
bool cmp(node a,node b)
{
	if(a.key<b.key)
	{
		return true;
	}
	else
	{
		return false;
	}
}
int main()
{
	//ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>N>>startaddress;
    for(int i=0;i<N;i++)
    {
    	int address;
    	int key;
    	int next;
    	cin>>address>>key>>next;
        linklist[address].address=address;
		linklist[address].key=key;
		linklist[address].next=next;	
	}
	vector<node> ans;
	while(startaddress!=-1)
	{
		//startaddress=linklist[startaddress].next;
		ans.push_back(linklist[startaddress]);
		startaddress=linklist[startaddress].next;
	}
	int cnt=ans.size();
	if(cnt==0)
	{
		printf("0 -1\n");
		return 0;
	 } 
	sort(ans.begin(),ans.end(),cmp);
	for(int i=0;i<cnt;i++)
	{
		if(i==0)
	    {
	    	startaddress=ans[i].address;
		}
        if(i==cnt-1)
        {
        	ans[i].next=-1;
		}
		else
		ans[i].next=ans[i+1].address;	
	}
    printf("%d %05d\n",cnt,startaddress);
	for(int i=0;i<cnt;i++)
	{
		if(i==cnt-1)
		{
		printf("%05d %d %d\n",ans[i].address,ans[i].key,ans[i].next);	
		}
		else
		{
			printf("%05d %d %05d\n",ans[i].address,ans[i].key,ans[i].next);
		}
		//printf("%05d %d %05d\n",ans[i].address,ans[i].key,ans[i].next);
	   
	}
		

	

	return 0;
 } 

网站公告

今日签到

点亮在社区的每一天
去签到