鱼C论坛

 找回密码
 立即注册
查看: 2652|回复: 4

[已解决]单链表

[复制链接]
发表于 2022-4-26 10:17:53 | 显示全部楼层 |阅读模式
25鱼币
头插法创建单链表、遍历链表、删除链表

作者 伍建全
单位 重庆科技学院
输入一系列自然数(0和正整数),输入-1时表示输入结束。按照输入的顺序,用头插法建立单链表,并遍历所建立的单链表,输出这些数据。注意 -1 不加入链表。

输入格式:
第一行是一个正整数k,表示以下会有k组测试数据。

每组测试数据是一系列以空格隔开的自然数(0和正整数)。数列末尾的 -1 表示本组测试数据结束。按照输入的顺序,用头插法建立单链表,并遍历所建立的单链表,输出这些数据。注意 -1 不加入链表。

输出格式:
对于每组测试数据,输出链表中各节点的数据域。每个数据后有一个空格。每组测试数据的输出占1行。

输入样例:
3
1 2 3 4 5 -1
30 20 10 -1
4 2 2 1 1 2 0 2 -1
输出样例:
在这里给出相应的输出。例如:

5 4 3 2 1
10 20 30
2 0 2 1 1 2 2 4
注意:对每组测试数据,创建链表,遍历链表输出之后,一定要删除链表,否则会出现“内存超限”。
--------------------------------------------------------------------------------------------------------------------------------------
各位大哥怎么写
最佳答案
2022-4-26 10:17:54

参考参考吧,HeadInsertTest.java 文件:

  1. import java.util.Scanner;

  2. /**
  3. * 链表节点类
  4. */
  5. class LNode {
  6.     public int val;
  7.     public LNode next;

  8.     public LNode(int val){
  9.         this.val = val;
  10.     }
  11. }

  12. /**
  13. * 测试类,以及头插法创建链表、打印输出链表方法的实现
  14. */
  15. public class HeadInsertTest {
  16.     public static void main(String[] args) {
  17.         Scanner scan = new Scanner(System.in);
  18.         int count = scan.nextInt();
  19.         scan.nextLine();

  20.         String[][] sVal = new String[count][];
  21.         for (int i = 0; i < count; i++){
  22.             sVal[i] = scan.nextLine().split(" ");
  23.         }

  24.         for (int i = 0; i < count; i++){
  25.             LNode head = headInsertCreateLinkedList(sVal[i]);
  26.             printLinkedList(head);
  27.             System.out.println();
  28.         }


  29.     }

  30.     /**
  31.      * 该方法接收一个整数字符串值数组,用头插法创建链表
  32.      * @param sNode
  33.      * @return
  34.      */
  35.     public static LNode headInsertCreateLinkedList(String[] sNode){
  36.         if (sNode == null || sNode.length <= 1){
  37.             return null;
  38.         }
  39.         LNode dummy = new LNode(-1);
  40.         LNode node = new LNode(Integer.parseInt(sNode[0]));
  41.         dummy.next = node;
  42.         for (int i = 1; i < sNode.length; i++){
  43.             if ("-1".equals(sNode[i])){
  44.                 return dummy.next;
  45.             }
  46.             node = new LNode(Integer.parseInt(sNode[i]));
  47.             node.next = dummy.next;
  48.             dummy.next = node;
  49.         }

  50.         return dummy.next;
  51.     }

  52.     /**
  53.      * 该方法接收一个链表头节点,进行链表打印输出
  54.      * @param head
  55.      */
  56.     public static void printLinkedList(LNode head){
  57.         while (head != null){
  58.             System.out.print(head.val + " ");
  59.             head = head.next;
  60.         }
  61.     }
  62. }
复制代码

最佳答案

查看完整内容

参考参考吧,HeadInsertTest.java 文件:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-26 10:17:54 | 显示全部楼层    本楼为最佳答案   

参考参考吧,HeadInsertTest.java 文件:

  1. import java.util.Scanner;

  2. /**
  3. * 链表节点类
  4. */
  5. class LNode {
  6.     public int val;
  7.     public LNode next;

  8.     public LNode(int val){
  9.         this.val = val;
  10.     }
  11. }

  12. /**
  13. * 测试类,以及头插法创建链表、打印输出链表方法的实现
  14. */
  15. public class HeadInsertTest {
  16.     public static void main(String[] args) {
  17.         Scanner scan = new Scanner(System.in);
  18.         int count = scan.nextInt();
  19.         scan.nextLine();

  20.         String[][] sVal = new String[count][];
  21.         for (int i = 0; i < count; i++){
  22.             sVal[i] = scan.nextLine().split(" ");
  23.         }

  24.         for (int i = 0; i < count; i++){
  25.             LNode head = headInsertCreateLinkedList(sVal[i]);
  26.             printLinkedList(head);
  27.             System.out.println();
  28.         }


  29.     }

  30.     /**
  31.      * 该方法接收一个整数字符串值数组,用头插法创建链表
  32.      * @param sNode
  33.      * @return
  34.      */
  35.     public static LNode headInsertCreateLinkedList(String[] sNode){
  36.         if (sNode == null || sNode.length <= 1){
  37.             return null;
  38.         }
  39.         LNode dummy = new LNode(-1);
  40.         LNode node = new LNode(Integer.parseInt(sNode[0]));
  41.         dummy.next = node;
  42.         for (int i = 1; i < sNode.length; i++){
  43.             if ("-1".equals(sNode[i])){
  44.                 return dummy.next;
  45.             }
  46.             node = new LNode(Integer.parseInt(sNode[i]));
  47.             node.next = dummy.next;
  48.             dummy.next = node;
  49.         }

  50.         return dummy.next;
  51.     }

  52.     /**
  53.      * 该方法接收一个链表头节点,进行链表打印输出
  54.      * @param head
  55.      */
  56.     public static void printLinkedList(LNode head){
  57.         while (head != null){
  58.             System.out.print(head.val + " ");
  59.             head = head.next;
  60.         }
  61.     }
  62. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-26 10:50:39 From FishC Mobile | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-4-26 10:58 编辑

.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-26 11:30:02 | 显示全部楼层
你写的代码呢?
你写了多少?
不是一点也没写吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-26 13:00:47 From FishC Mobile | 显示全部楼层
我比较好奇的是这个题目是 java 还是 C?java 需要删除列表?内存超限?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-15 03:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表