leetcode 14: Swap Nodes in Pairs

来源:互联网 发布:mac os 开机密码 编辑:程序博客网 时间:2024/06/03 21:29

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.



 翻译 :给定一个链表,调换每两个相邻节点,并返回其头部。 例如, 给定 1->2->3->4, 你应该返回的链表是 2->1->4->3。 你的算法必须使用唯一不变的空间。 你也不能修改列表中的值,只有节点本身是可以改变的。

/**  *  * public class ListNode {  *     int val;  *     ListNode next;  *     ListNode(int x) {  *         val = x;  *         next = null;  *     }  * }  */  


public class S24 {         public static void main(String[] args) {          ListNode n1 = new ListNode(1);          ListNode n2 = new ListNode(2);          n1.next = n2;          ListNode n3 = new ListNode(3);          n2.next = n3;          n1.print();          ListNode head = swapPairs(n1);          head.print();      }             public static ListNode swapPairs(ListNode head) {          if(head == null){              return null;          }          // 当只有一个元素的情况          if(head.next == null){              return head;          }          ListNode i = head;  // i指向第1个          ListNode j = i.next;    // j指向第2个          ListNode k = j.next;    // k指向第3个                     head = head.next;             while(j != null){              j.next = i;              if(k!=null && k.next!=null){    // 当有偶数个节点                   i.next = k.next;              }else{      // 当有奇数个节点                  i.next = k;              }                             // 更新i,j,k的值,前进两格              i = k;              if(k != null){                  j = k.next;              }else{                  j = null;              }              if(k!=null && k.next!=null){                  k = k.next.next;              }else{                  k = null;              }          }          return head;      }  }  


0 0
原创粉丝点击