-
利用指针交换的思想,属于链表中比较基础的算法 -
主要思想:
对于没有头结点的链表问题最好定义一个虚拟头结点 当链表为空和链表只有一个结点的时候,无需进行交换
创建一个头结点连接到链表上,通过循环遍历链表 只要链表满足pro.next != null && pro.next.next != null 就一直循环下去
主要的结点交换步骤:(此处pro为头结点,head为第一个结点)
ListNode temp = head.next.next;
pro.next = head.next;
head.next.next = head;
head.next = temp;
更新pro和head的位置
pro = head;
head = head.next;
最后返回从第一个结点开始的链表即可 return dummyNode.next;
代码部分:
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummyNode = new ListNode(0, head);
ListNode pro = dummyNode;
while(pro.next != null && pro.next.next != null){
ListNode temp = head.next.next;
pro.next = head.next;
head.next.next = head;
head.next = temp;
pro = head;
head = head.next;
}
return dummyNode.next;
}
}
|