-
题目地址:http://ac.jobdu.com/problem.php?pid=1181
-
建立一个升序链表并遍历输出。
题目描述:
-
输入:
-
输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。
-
输出:
-
可能有多组测试数据,对于每组数据,
将n个整数建立升序链表,之后遍历链表并输出。
-
样例输入:
-
4 3 5 7 9
-
样例输出:
-
3 5 7 9
-
来源:
- 2000年华中科技大学计算机研究生机试真题
-
如果用数组的话,使用快排内存消耗和时间都稍微小一些。
如果使用Java自带链表,使用Collections.sort(),会很慢,也就是链表的快排比较耗时间。
可以使用冒泡排序,内存消耗和时间消耗都数最小。 - C++ AC
-
#include <stdio.h> #include <malloc.h> struct LinkedNode{ int data; struct LinkedNode *next; }; int n,i; int main(){ LinkedNode *node,*tail,*p,*q; while(scanf("%d",&n) != EOF){ node = (LinkedNode*)malloc(sizeof(LinkedNode)); node->next = NULL; tail = node; for(i = 0; i < n; i++){ int data; scanf("%d",&data); p = (LinkedNode*)malloc(sizeof(LinkedNode)); p->data = data; tail->next = p; tail = p; } tail-> next = NULL; p = node->next; while(p != NULL){ q = p -> next; while(q != NULL){ if(p -> data > q->data){ int tmp = p->data; p->data = q->data; q->data = tmp; } q = q->next; } p = p->next; } p = node->next; for(i = 0; i < n; i++){ if(i == n-1){ printf("%d\n",p->data); }else{ printf("%d ",p->data); p = p->next; } } free(p); free(node); } return 0; } /************************************************************** Problem: 1181 User: wangzhenqing Language: C++ Result: Accepted Time:320 ms Memory:6300 kb ****************************************************************/
Java AC
-
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.StreamTokenizer; public class Main { /* * 1181 */ public static void main(String[] args) throws Exception { StreamTokenizer st = new StreamTokenizer(new BufferedReader( new InputStreamReader(System.in))); while (st.nextToken() != StreamTokenizer.TT_EOF) { int n = (int) st.nval; LinkedNode node = null; LinkedNode point = null; st.nextToken(); node = new LinkedNode((int)st.nval , null); point = node; for (int i = 1; i < n; i++) { st.nextToken(); LinkedNode tempNode = new LinkedNode((int)st.nval , null); point.next = tempNode; point = point.next; } point = node; LinkedNode qNode = null; while (point != null) { qNode = point.next; while (qNode != null) { if (point.data > qNode.data) { int data = point.data; point.data = qNode.data; qNode.data = data; } qNode = qNode.next; } point = point.next; } StringBuffer sb = new StringBuffer(); while (node != null) { sb.append(node.data+" "); node = node.next; } System.out.println(sb.toString().trim()); } } static class LinkedNode { private int data; private LinkedNode next; public LinkedNode(int data, LinkedNode next) { super(); this.data = data; this.next = next; } public LinkedNode() { super(); } } } /************************************************************** Problem: 1181 User: wangzhenqing Language: Java Result: Accepted Time:540 ms Memory:59352 kb ****************************************************************/