单链表的新增

本文介绍了单链表数据结构,并详细阐述了如何在链表中插入新节点,包括找到前一个节点、创建新节点、设置指针等步骤。此外,还提供了一个简单的插入操作代码示例。同时,文章展示了对链表进行排序的方法,通过比较相邻节点的数据并交换位置实现。最后,给出了一个完整的示例程序,用于添加元素、打印链表长度、排序和打印排序后的链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现单链表的新增操作

链表作为最基本的数据结构,存储特点如下:可以用任意一组存储单元来存储单链表中的数据元素且存储单元可以不是连续的。N个节点连接在一起被称之为链表。当节点只包含其后继节点的信息的链表我们称之为单链表,在内存中存储的方式如下图:

单链表的存储方式

定义链表

 class Node {
   Node node = null;
   int data;
   public Node (int data){
     this.data = data;  
   }
 }

链表最重要的操作是向链表中插入元素和从链表中删除元素

单链表的插入操作是将值为X的的新节点插入到链表第i个节点位置上。也就是插入数据在ai - 1 与 ai之间。

  • 找到ai - 1的引用(存储位置)p

  • 生成一个数据域为x的新节点s

  • 设置p.next = s

  • 设置s.next = a

单链表插入节点示意图

单链表的基本操作代码

 public class LinkedlistDemo {
 /**
   定义链表
 */
     class Node{
         Node next = null;
         int data;
         public Node (int data){this.data = data;}
     }
     
     Node head = null;
     /***
      * 向链表中插入数据
      * @param d 要插入的数据
      */
     public void addNode(int d){
         Node newNode =  new Node(d);
         if (head == null) {
             head = newNode;
             return;
         }
         Node tmp = head;
         while (tmp.next != null){
             tmp = tmp.next;
         }
         /** add node to end*/
         tmp.next = newNode;
     }
     /***
      * 对链表进行排序
      * 返回排序后的头节点
      */
     public Node orderList() {
         Node nextNode = null;
         int temp = 0;
         Node curNode = head;
         while (curNode.next != null){
             nextNode = curNode.next;
             while (nextNode != null){
                 if (curNode.data > nextNode.data){
                     temp = curNode.data;
                     curNode.data = nextNode.data;
                     nextNode.data = temp;
                 }
                 nextNode = nextNode.next;
             }
             curNode = curNode.next;
         }
         return head;
     }
 ​
     /***
      * 返回节点长度
      * @return
      */
     public int length(){
         int length = 0;
         Node tmp = head;
         while (tmp != null){
             length++;
             tmp = tmp.next;
         }
         return length;
     }
     /***
      * 打印list
      */
     private void printList() {
         Node tmp = head;
         while (tmp != null){
             System.out.println(tmp.data);
             tmp = tmp.next;
         }
     }
 ​
     public static void main(String[] args) {
         LinkedlistDemo list = new LinkedlistDemo();
         list.addNode(1);
         list.addNode(11);
         list.addNode(3);
         list.addNode(4);
         System.out.println(list.length());
         System.out.println("before ordre:");
         list.printList();
         list.orderList();
         System.out.println("after order");
         list.printList();
     }

输出结果

 listlength:4
 before ordre:
 1
 11
 3
 4
 after order:
 1
 3
 4
 11

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值