题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
eg: 1->2->3->4 ==> 2->1->4->3
思路:【看不懂请见谅,直接看代码】
1.创建一个带头节点的链表,以便于操作ListNode newHead = new ListNode(-1)
2.我们让这个新链表头结点指向原链表的第一个结点(即使为空链表也无所谓)tail.next = head;
。
3. 既然要两两交换那我们就要确定当前值不为 null 同时 它的下一个结点不为 nullwhile(cur != null && cur.next != null)
4. 然后我们让新链表的最后一个结点指向交换后再前面的结点curNexttail.next = curNext
5. 再让将要交换后的未接点与后边的链表进行连接
6. 进行交换
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode newHead = new ListNode(-1);
ListNode tail = newHead;
ListNode cur = head;
tail.next = cur;
while(cur != null && cur.next != null){
ListNode curNext = cur.next;
tail.next = curNext;
cur.next = curNext.next;
curNext.next = cur;
tail = cur;
cur = cur.next;
}
return newHead.next;
}
}