当前位置:首页 > Java

java如何调整链表

2026-03-21 21:13:12Java

调整链表的方法

在Java中调整链表通常涉及插入、删除、修改节点或重新组织链表结构。以下是常见的操作示例:

插入节点

在链表头部或尾部插入新节点:

java如何调整链表

// 头部插入
public void insertAtHead(ListNode head, int val) {
    ListNode newNode = new ListNode(val);
    newNode.next = head;
    head = newNode;
}

// 尾部插入
public void insertAtTail(ListNode head, 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;
}

删除节点

删除指定值的节点:

public ListNode deleteNode(ListNode head, int val) {
    if (head == null) return null;
    if (head.val == val) return head.next;

    ListNode curr = head;
    while (curr.next != null && curr.next.val != val) {
        curr = curr.next;
    }
    if (curr.next != null) {
        curr.next = curr.next.next;
    }
    return head;
}

反转链表

反转整个链表:

java如何调整链表

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode nextTemp = curr.next;
        curr.next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

交换相邻节点

交换链表中相邻的两个节点:

public ListNode swapPairs(ListNode head) {
    if (head == null || head.next == null) return head;

    ListNode dummy = new ListNode(0);
    dummy.next = head;
    ListNode curr = dummy;

    while (curr.next != null && curr.next.next != null) {
        ListNode first = curr.next;
        ListNode second = curr.next.next;

        first.next = second.next;
        curr.next = second;
        curr.next.next = first;
        curr = curr.next.next;
    }
    return dummy.next;
}

合并两个有序链表

将两个有序链表合并为一个:

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(0);
    ListNode curr = dummy;

    while (l1 != null && l2 != null) {
        if (l1.val < l2.val) {
            curr.next = l1;
            l1 = l1.next;
        } else {
            curr.next = l2;
            l2 = l2.next;
        }
        curr = curr.next;
    }

    curr.next = (l1 != null) ? l1 : l2;
    return dummy.next;
}

注意事项

  • 操作链表时需注意边界条件(如空链表、单节点链表)
  • 修改链表结构时建议使用虚拟头节点(dummy node)简化操作
  • 对于双向链表,还需处理前驱指针(prev)的指向

标签: 链表java
分享给朋友:

相关文章

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

java如何调用接口

java如何调用接口

调用接口的基本方法 在Java中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void d…

如何配置java环境

如何配置java环境

下载JDK安装包 访问Oracle官网或OpenJDK官网,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。下载完成后,运行安装程序并按照提示完成安装。 设置环境变量 右键…

java如何上传文件

java如何上传文件

使用HttpURLConnection上传文件 在Java中,可以通过HttpURLConnection实现文件上传功能。需要设置请求头为multipart/form-data,并构建包含文件数据的请…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io…

java如何遍历map

java如何遍历map

遍历Map的几种方法 在Java中,遍历Map有多种方式,可以根据需求选择合适的方法。以下是常见的几种遍历方式: 使用entrySet遍历 通过entrySet()方法获取键值对的集合,可以同时访问…