目录
- 1- 思路
- 四指针
- 2- 实现
- ⭐24. 两两交换链表中的节点——题解思路
- 3- ACM 实现
- 原题连接:24. 两两交换链表中的节点
1- 思路
四指针
- 定义
dummyHead
:便于处理头结点 - ①
cur
指针,记录两个交换节点的前 前一个结点 - ② 第一个指针
first
- ③ 第二个指针
second
更新:
- 初始化
first
和second
:first = cur.next
、second = cur.next.next
- 更新:结点翻转后跟新,涉及三个步骤
first
的next
更新 ——> ①second
的next
更新 ——> ②- 交换后前一个结点的
next
更新 ——> ③
2- 实现
⭐24. 两两交换链表中的节点——题解思路
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode cur = dummyHead;
ListNode first = null;
ListNode second = null;
while(cur.next!=null && cur.next.next != null){
first = cur.next;
second = cur.next.next;
first.next = second.next;
second.next = first;
cur.next = second;
cur = first;
}
return dummyHead.next;
}
}
3- ACM 实现
public class swapPairs {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public static ListNode swapPairs(ListNode head){
// 1. 数据结构
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode cur = dummyHead;
ListNode first = null;
ListNode second = null;
// 2.循环
while(cur.next!=null && cur.next.next!=null){
first = cur.next;
second = cur.next.next;
//交换
first.next = second.next;
second.next = first;
cur.next = second;
cur = first;
}
return dummyHead.next;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1 = sc.nextInt();
ListNode head1 = null, tail1 = null;
for (int i = 0; i < n1; i++) {
int val = sc.nextInt();
ListNode newNode = new ListNode(val);
if (head1 == null) {
head1 = newNode;
tail1 = newNode;
} else {
tail1.next = newNode;
tail1 = newNode;
}
}
ListNode forRes = swapPairs(head1);
while(forRes!=null){
System.out.print(forRes.val+" ");
forRes = forRes.next;
}
}
}