两两交换链表中的节点
2017-06-27 23:22
239 查看
给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
挑战
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
import java.util.Scanner;
/**
* 给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
挑战
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
*
* @author Dell
*
*/
public class Test451 {
public static ListNode swapPairs(ListNode head)
{
if(head==null||head.next==null)
return head;
ListNode temp=new ListNode(-1);
temp.next=head;
ListNode q=temp;
ListNode p=head;
ListNode r=null;
while(p!=null)
{
r=p.next;
if(r==null)
break;
p.next=r.next;
r.next=null;
q.next=r;
r.next=p;
q=p;
p=p.next;
}
return temp.next;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ListNode list=new ListNode(-1);
int n=sc.nextInt();
ListNode p=list;
for(int i=0;i<n;i++)
{
ListNode temp=new ListNode(sc.nextInt());
p.next=temp;
p=p.next;
}
ListNode result=swapPairs(list.next);
while(result!=null)
{
System.out.print(result.val+" ");
result=result.next;
}
}
}
样例
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
挑战
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
import java.util.Scanner;
/**
* 给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
挑战
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
*
* @author Dell
*
*/
public class Test451 {
public static ListNode swapPairs(ListNode head)
{
if(head==null||head.next==null)
return head;
ListNode temp=new ListNode(-1);
temp.next=head;
ListNode q=temp;
ListNode p=head;
ListNode r=null;
while(p!=null)
{
r=p.next;
if(r==null)
break;
p.next=r.next;
r.next=null;
q.next=r;
r.next=p;
q=p;
p=p.next;
}
return temp.next;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ListNode list=new ListNode(-1);
int n=sc.nextInt();
ListNode p=list;
for(int i=0;i<n;i++)
{
ListNode temp=new ListNode(sc.nextInt());
p.next=temp;
p=p.next;
}
ListNode result=swapPairs(list.next);
while(result!=null)
{
System.out.print(result.val+" ");
result=result.next;
}
}
}
相关文章推荐
- Java实现-两两交换链表中的节点
- 两两交换链表中的节点
- [LintCode 451] 两两交换链表中的节点(Python)
- LintCode 两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点-LintCode
- lintcode——两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点
- Swap Nodes in Pairs 链表两两交换节点@LeetCode
- 两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点
- 链表两两交换节点
- 两两交换链表中的节点
- LintCode-两两交换链表中的节点
- 两两交换链表中的节点