链表的操作:1、构建空表H,插入 {"a","b","c","d","f"} 遍历输出单链表H 输出单链表H的长度 判断单链表H是否为空 输出单链表H的第3个元素 输出元素c的位置 在第5个位置之前插入元素e后,输出单链表 删除H的第了个元素,输出单链表H,用java编程
时间: 2023-12-29 17:02:31 浏览: 71
JavaScript数据结构之单链表和循环链表
Java代码如下:
```java
public class LinkedListDemo {
public static void main(String[] args) {
// 构建空表H
Node head = new Node();
System.out.println("空表H:");
printLinkedList(head);
// 插入 {"a","b","c","d","f"}
String[] arr = {"a", "b", "c", "d", "f"};
for (String s : arr) {
insertTail(head, s);
}
System.out.println("插入后的单链表H:");
printLinkedList(head);
// 输出单链表H的长度
System.out.println("单链表H的长度:" + getLength(head));
// 判断单链表H是否为空
System.out.println("单链表H是否为空:" + isEmpty(head));
// 输出单链表H的第3个元素
System.out.println("单链表H的第3个元素:" + getElement(head, 3));
// 输出元素c的位置
System.out.println("元素c的位置:" + getPosition(head, "c"));
// 在第5个位置之前插入元素e后,输出单链表
insertBefore(head, "e", 5);
System.out.println("插入元素e后的单链表H:");
printLinkedList(head);
// 删除H的第1个元素,输出单链表H
deleteNode(head, 1);
System.out.println("删除第1个元素后的单链表H:");
printLinkedList(head);
}
// 定义节点类
public static class Node {
public String data;
public Node next;
public Node() {
}
public Node(String data) {
this.data = data;
}
}
// 尾插法插入节点
public static void insertTail(Node head, String data) {
Node newNode = new Node(data);
Node p = head;
while (p.next != null) {
p = p.next;
}
p.next = newNode;
}
// 遍历输出单链表
public static void printLinkedList(Node head) {
Node p = head.next;
while (p != null) {
System.out.print(p.data + " ");
p = p.next;
}
System.out.println();
}
// 获取单链表的长度
public static int getLength(Node head) {
int len = 0;
Node p = head.next;
while (p != null) {
len++;
p = p.next;
}
return len;
}
// 判断单链表是否为空
public static boolean isEmpty(Node head) {
return head.next == null;
}
// 获取单链表的第i个元素
public static String getElement(Node head, int i) {
int j = 0;
Node p = head.next;
while (p != null && j < i - 1) {
j++;
p = p.next;
}
if (p == null || j > i - 1) {
return null;
} else {
return p.data;
}
}
// 获取元素data在单链表中第一次出现的位置
public static int getPosition(Node head, String data) {
int i = 0;
Node p = head.next;
while (p != null) {
i++;
if (p.data.equals(data)) {
return i;
}
p = p.next;
}
return -1;
}
// 在第i个位置之前插入元素data
public static void insertBefore(Node head, String data, int i) {
if (i < 1 || i > getLength(head) + 1) {
System.out.println("插入位置不合法!");
return;
}
Node newNode = new Node(data);
Node p = head;
for (int j = 0; j < i - 1; j++) {
p = p.next;
}
newNode.next = p.next;
p.next = newNode;
}
// 删除第i个节点
public static void deleteNode(Node head, int i) {
if (i < 1 || i > getLength(head)) {
System.out.println("删除位置不合法!");
return;
}
Node p = head;
for (int j = 0; j < i - 1; j++) {
p = p.next;
}
p.next = p.next.next;
}
}
```
阅读全文