没仔细审题,走了很多弯路。题目要求:内存中有很多散列的节点,可能构成不止一个链表。其次要注意空链表的情况。
// 1052. Linked List Sorting.cpp: 主项目文件。 #include "stdafx.h" #include <cstdio> #include <algorithm> using namespace std; const int N=100003; typedef struct Node{ int add,data,next; }Node; Node node[N],list[N]; int n; bool cmp1(Node m1,Node m2){ return m1.add<m2.add; } bool cmp(Node m1,Node m2){ return m1.data<m2.data; } int binarySearch(int vAdd,int low,int high){ if(low<=high){ int mid=low+(high-mid)>>1; if(vAdd==node[mid].add) return mid; else if(vAdd<node[mid].add) return binarySearch(vAdd,low,mid-1); else return binarySearch(vAdd,mid+1,high); } return -1; } int creatList(int head){ int curAdd=head,cnt=0; while(curAdd!=-1){ list[cnt].add=curAdd; int index=binarySearch(curAdd,0,n-1); list[cnt].data=node[index].data; list[cnt++].next=node[index].next; curAdd=node[index].next; } return cnt; } int main() { int head; scanf("%d%d",&n,&head); for(int i=0;i<n;i++) scanf("%d%d%d",&node[i].add,&node[i].data,&node[i].next); sort(node,node+n,cmp1); int listLength=creatList(head); sort(list,list+listLength,cmp); if(listLength==0){ printf("0 -1\n"); return 0; } printf("%d %05d\n",listLength,list[0].add); for(int i=0;i<listLength-1;i++){ printf("%05d %d %05d\n",list[i].add,list[i].data,list[i+1].add); } printf("%05d %d -1\n",list[listLength-1].add,list[listLength-1].data); return 0; }