首页 > 代码库 > Swap Nodes in Pairs
Swap Nodes in Pairs
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 may not modify the values in the list, only nodes itself can be changed.
这道题如果直接交换值是很easy的
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * }10 * }11 */12 public class Solution {13 public ListNode swapPairs(ListNode head) {14 if(null == head || null == head.next)15 return head;16 ListNode front = head;17 ListNode behind = front.next;18 19 do{20 int temp = front.val;21 front.val = behind.val;22 behind.val = temp;23 if(null == behind.next || null == behind.next.next)24 break;25 front = behind.next;26 behind = front.next;27 }while(true);28 29 return head;30 }31 }
按照题目要求不交换值,交换节点的引用
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * }10 * }11 */12 public class Solution {13 public ListNode swapPairs(ListNode head) {14 if(null == head || null == head.next)15 return head;16 ListNode behind = head;17 ListNode front = behind.next;18 ListNode temp;19 ListNode pre;20 //交换开头两个节点21 22 behind.next = front.next;23 front.next = behind;24 25 head = front;26 //交换一下front和behind27 temp = behind;28 behind = front;29 front = temp;30 31 pre = front;//倒数第二个指针32 33 while(null != front.next && null != front.next.next){34 behind = front.next;35 front = behind.next;36 37 behind.next = front.next;38 front.next = behind;39 40 temp = behind;41 behind = front;42 front = temp;43 44 pre.next = behind;45 pre = front;46 }47 48 return head;49 }50 }
Swap Nodes in Pairs
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。