思路:递归或者迭代
迭代思路有两种,跟k个一组翻转链表有点像,即k = 2的时候
25. K 个一组翻转链表
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dum = new ListNode(0, head);
int len = getLen(head);
ListNode pre = dum, cur = head;
for(int i = 0; i < len / k; i++){
for(int j = 0; j < k - 1; j++){
ListNode next = cur.next;
cur.next = next.next;
next.next = pre.next;
pre.next = next;
}
pre = cur;
cur = cur.next;
}
return dum.next;
}
public int getLen(ListNode root){
ListNode temp = root;
int len = 0;
while(temp != null){
len++;
temp = temp.next;
}
return len;
}
}
本题:
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode dum = new ListNode(0, head);
ListNode pre = dum;
ListNode cur = head;
int len = getlen(head);
for(int i = 0; i < len / 2; i++){
ListNode nextNode = cur.next;
cur.next = nextNode.next;
nextNode.next = pre.next;
pre.next = nextNode;
pre = cur;
cur = cur.next;
}
return dum.next;
}
public int getlen(ListNode head){
ListNode temp = head;
int len = 0;
while(temp != null){
len++;
temp = temp.next;
}
return len;
}
}
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode dum = new ListNode(0, head);
ListNode pre = dum;
ListNode cur = head;
while(cur != null && cur.next != null){
ListNode nextNode = cur.next;
cur.next = nextNode.next;
nextNode.next = pre.next;
pre.next = nextNode;
pre = cur;
cur = cur.next;
}
return dum.next;
}
}
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode temp = dummyHead;
while (temp.next != null && temp.next.next != null) {
ListNode node1 = temp.next;
ListNode node2 = temp.next.next;
temp.next = node2;
node1.next = node2.next;
node2.next = node1;
temp = node1;
}
return dummyHead.next;
}
}
递归的讲解:https://lyl0724.github.io/2020/01/25/1/#%E9%80%92%E5%BD%92%E8%A7%A3%E9%A2%98%E4%B8%89%E9%83%A8%E6%9B%B2
class Solution {
public ListNode swapPairs(ListNode head) {
// 链表中没有节点,或者链表中只有一个节点
if (head == null || head.next == null) {
return head;
}
ListNode newHead = head.next;
head.next = swapPairs(newHead.next);
newHead.next = head;
return newHead;
}
}