Java实现头插和尾插的单链表

单链表是常用的数据结构之一,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。本篇博客介绍如何使用Java实现单链表,并提供了头插法和尾插法的代码示例。

1. 定义节点类

首先,我们需要定义一个节点类ListNode,用于表示链表中的节点。每个节点包含一个val属性表示节点的值,以及一个next属性指向下一个节点。

class ListNode {
    int val;
    ListNode next;

    public ListNode(int val) {
        this.val = val;
        this.next = null;
    }
}

2. 定义单链表类

接下来,我们定义一个单链表类LinkedList,该类具有头指针head用于指向链表的第一个节点。

class LinkedList {
    ListNode head;

    // ...
}

3. 头插法

头插法是将新节点插入到链表的头部,使其成为新的第一个节点。实现头插法的步骤如下:

public void insertAtHead(int val) {
    ListNode newNode = new ListNode(val);
    newNode.next = head;
    head = newNode;
}

insertAtHead方法中,我们创建了一个新的节点newNode,将其next属性指向当前的头节点head,然后将head更新为newNode,使得新节点成为新的头节点。

4. 尾插法

尾插法是将新节点插入到链表的末尾,使其成为链表中最后一个节点。实现尾插法的步骤如下:

public void insertAtTail(int val) {
    ListNode newNode = new ListNode(val);

    if (head == null) {
        head = newNode;
        return;
    }

    ListNode curr = head;
    while (curr.next != null) {
        curr = curr.next;
    }

    curr.next = newNode;
}

insertAtTail方法中,我们先创建一个新节点newNode,然后检查链表是否为空。如果链表为空,则将新节点作为头节点。否则,我们通过循环找到链表的最后一个节点,将新节点插入到最后一个节点的next属性。

5. 打印链表

最后,我们定义一个方法printList,用于按顺序打印出整个链表的节点值。

public void printList() {
    ListNode curr = head;
    while (curr != null) {
        System.out.print(curr.val + " ");
        curr = curr.next;
    }
    System.out.println();
}

printList方法中,我们从头节点开始遍历链表,依次输出每个节点的值,并用空格隔开。

6. 测试代码

为了验证我们实现的头插法和尾插法是否正确,我们可以编写一段测试代码。以下是一个简单的示例:

public class Main {
    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();

        linkedList.insertAtHead(1);
        linkedList.insertAtHead(2);
        linkedList.insertAtHead(3);

        linkedList.printList(); // 输出: 3 2 1

        linkedList.insertAtTail(4);
        linkedList.insertAtTail(5);

        linkedList.printList(); // 输出: 3 2 1 4 5
    }
}

在测试代码中,我们创建了一个LinkedList对象,然后通过调用insertAtHeadinsertAtTail方法插入节点,最后使用printList方法打印出整个链表。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单链表是一种常见的数据结构,它由一个个结点组成,每个结点包含两个部分:数据域和指针域。其中,数据域用于存储数据,指针域用于指向下一个结点。单链表有多种入方式,其中比较常见的是法和法。 1. 法: 法是指在链表的入新的结点。具体步骤如下: (1)创建一个新的结点,将要入的数据存储在该结点的数据域中; (2)将新结点的指针域指向原来的结点; (3)将指针指向新结点。 下面是一个Python实现单链表的例子: ```python class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def insert_at_beginning(self, data): new_node = Node(data) new_node.next = self.head self.head = new_node def print_list(self): current_node = self.head while current_node: print(current_node.data) current_node = current_node.next ``` 2. 法: 法是指在链表的入新的结点。具体步骤如下: (1)创建一个新的结点,将要入的数据存储在该结点的数据域中; (2)将原来的结点的指针域指向新结点; (3)将新结点的指针域设置为NULL。 下面是一个Python实现单链表的例子: ```python class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def insert_at_end(self, data): new_node = Node(data) if self.head is None: self.head = new_node return last_node = self.head while last_node.next: last_node = last_node.next last_node.next = new_node def print_list(self): current_node = self.head while current_node: print(current_node.data) current_node = current_node.next ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值