您的位置:首页 > 其它

两两交换链表中的节点

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;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode