链表——成对的反转链表

来源:互联网 发布:淘宝swisse官方旗舰店 编辑:程序博客网 时间:2024/05/16 15:14

题目:swap-nodes-in-pairs 一对一对的反转链表内的结点


For example,
Given1->2->3->4,  return 2->1->4->3.


思路:“按K个结点一组反转链表”当k为2时的特殊情况。

代码如下:

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


0 0
原创粉丝点击