Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You maynot modify the values in the list, only nodes itself can be changed.
解题思路:
就是不断地交换相邻两个节点的next,不断循环下去直到结束,记得就是在交换当前两个节点的next(例如k跟k+1)时,记得更新k-1的next。
- /**
- * Definition for singly-linked list.
- * public class ListNode {
- * int val;
- * ListNode next;
- * ListNode(int x) { val = x; }
- * }
- */
- public class Solution {
- public ListNode swapPairs(ListNode head) {
- if(head == null || head.next == null)
- return head;
- //当前节点k
- ListNode p = head;
- //下一节点k+1
- ListNode q = head.next;
- //记录上一节点k-1
- ListNode r = null;
- head = q;
- while(p != null && q != null)
- {
- //交换next
- p.next = q.next;
- q.next = p;
- //更新上一节点的next
- if(r != null)
- r.next = q;
- //更新节点
- r = p;
- p = p.next;
- if(p != null)
- q = p.next;
- }
- return head;
- }
- }
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null)
return head;
//当前节点k
ListNode p = head;
//下一节点k+1
ListNode q = head.next;
//记录上一节点k-1
ListNode r = null;
head = q;
while(p != null && q != null)
{
//交换next
p.next = q.next;
q.next = p;
//更新上一节点的next
if(r != null)
r.next = q;
//更新节点
r = p;
p = p.next;
if(p != null)
q = p.next;
}
return head;
}
}