24. 两两交换链表中的节点
题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
代码:
/**
-
Definition for singly-linked list.
-
public class ListNode {
-
int val;
-
ListNode next;
-
ListNode() {}
-
ListNode(int val) { this.val = val; }
-
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
-
}
*/
class Solution {
public ListNode swapPairs(ListNode head) {if(head==null||head.next==null){ //空或长度为1直接返回 return head; } ListNode pre=head; ListNode p=head; ListNode q=head.next; while(true){ if(pre==p){ //头节点单独处理 p.next=q.next; q.next=p; head=q; if(p.next!=null&&p.next.next!=null){ p=p.next; q=p.next;} else{break;} } else{ p.next=q.next; q.next=p; pre.next=q; pre=p; if(p.next!=null&&p.next.next!=null){ p=p.next; q=p.next;} else{break;} } } return head;
}
}