题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:
如果想要改变某个节点的位置,作为单链表而言必须找到该节点的前一个节点,所以可以设置一个虚拟头结点dummyHead,让dummyHead.next指向head。然后就可以按照我途中的三个步骤开始写代码,这种题要自己把结构画出来,写代码能更直观
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummyHead = new ListNode();
dummyHead.next = head;
ListNode cur = dummyHead;
//如果是偶数节点,cur.next为空是终止条件;如果是奇数节点,cur.next.next为空是终止条件
//并且顺序不能调换,否则会发生空指针异常
while(cur.next != null && cur.next.next != null){
ListNode temp = cur.next; //临时节点,防止cur.next节点丢失
ListNode temp1 = cur.next.next.next;
cur.next = cur.next.next; //第1步
cur.next.next = temp; //第2步
temp.next = temp1; //第3步
cur = cur.next.next;
}
return dummyHead.next;
}