链表算法之k逆序

来源:互联网 发布:网络21健康行是传销吗 编辑:程序博客网 时间:2024/06/05 07:32

有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1->2->3->4->5->6->7->8->null,K=3这个例子。调整后为,3->2->1->6->5->4->7->8->null。因为K==3,所以每三个节点之间逆序,但其中的7,8不调整,因为只有两个节点不够一组。

给定一个单链表的头指针head,同时给定K值,返回逆序后的链表的头指针。

思路:获取K个值之后放入栈中,再出栈,放入链表,再获取k值,依次循环。注意:最后不足k个的情况。

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};*/class KInverse {public:    ListNode* inverse(ListNode* head, int k) {        stack<int> m;        ListNode *p=head;        ListNode *q=head;        int i=0;        while(p)      //遍历整个链表            {        for( i=0;i<k&&p!=NULL;i++)  //每三个一组放入栈中            {            m.push(p->val);                p=p->next;        }            if(i==k)                 //如果获取了k个才进行逆序,最后几个如果不足k个则不执行                {                  for(int j=0;j<k;j++)     //出栈,入链表                {                q->val=m.top();                m.pop();                q=q->next;            }            }        }        return head;    }};


0 0
原创粉丝点击