题目:swap-nodes-in-pairs 一对一对的反转链表内的结点
For example,
Given1->2->3->4, return 2->1->4->3.
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null||head.next == null)
return head;
ListNode node=head;
ListNode helper=new ListNode(0);//创建一个辅助的头结点;
helper.next=head;//当2> length of list时,返回原链表;
ListNode lastgroup=helper;//记录上一组结点的尾结点;
ListNode nextgroup=head;//辅助记录下一组结点的首结点;
ListNode first=nextgroup;//记录下一组结点的首结点;
int count=1;
while(node!=null)
{
if(count<2)
{
count++;
node=node.next;
}else//count == 2;
{
nextgroup=node.next;
lastgroup.next=reverse(first,node);
lastgroup=first;
first.next=nextgroup;
first=nextgroup;
node=first;
count=1;
}
}
return helper.next;
}
//字符串反转通用方法;
public ListNode reverse(ListNode head,ListNode tail)
{
ListNode pre=head;
ListNode cur=head.next;
ListNode ne=null;
while(pre!=tail)
{
ne=cur.next;
cur.next=pre;
pre=cur;
cur=ne;
}
head.next=null;
head=pre;
return head;
}
}