24.两两交换链表中的结点
难度:中等
标签:链表
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
思路:头插,弄个头结点,然后插完一次,头结点后移
public ListNode swapPairs(ListNode head){
if(head==null||head.next==null) return head;
ListNode p,q;
p=q=null;
ListNode tmp=new ListNode(-1);
ListNode Head=tmp;
tmp.next=head;
p=head.next;
ListNode Heads=p;
while(p!=null){
//保存下一个结点
q=p.next;
//插入在前面
p.next=Head.next;
Head.next=p;
Head=Head.next.next;
//链上下一个结点
Head.next=q;
if(q!=null){
p=q.next;
}
else break;
}
return Heads;
}