Java 程序:在链表中查找中间元素

原文:https://www.studytonight.com/java-programs/java-program-to-find-the-middle-element-in-a-linked-list

在本教程中,我们将看到如何在 java 中找到链表的中间元素。LinkedList 是一种线性数据结构,其中元素不存储在连续的位置,每个元素都是一个单独的对象,具有数据部分和地址部分。每个元素都被称为一个节点。由于插入和删除的动态性和容易性,它们比数组更受欢迎。但是在继续之前,如果你不熟悉 java 中链表的概念,那么一定要查看一下 Java 中链表上的文章。

输入:输入链表元素:6 7 8 4 5

输出:链表的中间元素是:8

这可以通过使用以下方法来实现:

方法 1:使用 get()方法

方法 2:在单程中找到中间元素

让我们看看这些方法中的每一种,以便更好地理解。

Java 程序:程序 1:在链表中查找中间元素

在这个程序中,我们将看到如何在链表中找到中间元素。

算法:

  1. 开始
  2. 使用链表类创建Integer类型的链表。
  3. 现在向链表添加元素。
  4. 首先,使用长度乘 2 公式找到链表的中间索引。
  5. 使用 get(index)方法查找元素。
  6. 打印中间元素。
  7. 停下来。

让我们看看下面的例子,以更好地理解上述算法。

//Java Program to Find the Middle Element in a Linked List
import java.util.LinkedList;
public class Main 
{
  public static void main(String[] args)
  {
    // create a linked list using the LinkedList class
    LinkedList<Integer> ll = new LinkedList<>();
    // Add elements to LinkedList
    ll.add(2);
    ll.addFirst(3);
    ll.addLast(5);
    ll.addLast(6);
    ll.addLast(8);
    ll.addLast(13);
    ll.addLast(18);
    System.out.println("LinkedList: " + ll);
    // access middle element
    int middle = ll.get(ll.size()/2);
    System.out.println("Middle Element: " + middle);
    }
}

链表:[3,2,5,6,8,13,18] 中间元素:6

Java 程序:程序 2:在链表中查找中间元素

在这个程序中,我们将看到如何在链表中找到中间元素。

算法:

  1. 开始
  2. 使用链表数据结构创建String类型的链表。
  3. 现在向链表添加元素。
  4. 首先,找到链表的长度。
  5. 对同一个使用两个指针。
  6. 第一个指针将在每次迭代中递增,而第二个指针将在第二次迭代中递增。
  7. 当第一个指针指向链表的末尾时,第二个指针将指向链表的中间元素。
  8. 打印中间元素。
  9. 停下来。

让我们看看下面的例子,以更好地理解上述算法。

public class LinkedListTest 
{
    public static void main(String args[]) 
    {
        //creating a LinkedList
      LinkedList linkedList = new LinkedList();
      LinkedList.Node head = linkedList.head();
      linkedList.add( new LinkedList.Node("Apple"));
      linkedList.add( new LinkedList.Node("Mango"));
      linkedList.add( new LinkedList.Node("Orange"));
      linkedList.add( new LinkedList.Node("Gauva"));
      linkedList.add( new LinkedList.Node("Litchi"));
      //finding middle element of LinkedList in single pass
      LinkedList.Node current = head;
      int length = 0;
      LinkedList.Node middle = head;
      while(current.next() != null){
          length++;
          if(length%2 ==0){
              middle = middle.next();
          }
          current = current.next();
      }
      if(length%2 == 1){
          middle = middle.next();
      }
      System.out.println("The middle element of the Linked List: "+ middle);
    } 
}
class LinkedList{
    private Node head;
    private Node tail;
    public LinkedList(){
        this.head = new Node("head");
        tail = head;
    }
    public Node head(){
        return head;
    }
    public void add(Node node){
        tail.next = node;
        tail = node;
    }
    public static class Node{
        private Node next;
        private String data;
        public Node(String data){
            this.data = data;
        }
        public String data() {
            return data;
        }
        public void setData(String data) {
            this.data = data;
        }
        public Node next() {
            return next;
        }
        public void setNext(Node next) {
            this.next = next;
        }
        public String toString(){
            return this.data;
        }
    }
}

链表的中间元素:橙色