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;
}
反转链表
反转整个链表:

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)的指向






