首页 > 代码库 > 9月10日,美团网2014校招研发笔试哈尔滨站 1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现

9月10日,美团网2014校招研发笔试哈尔滨站 1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现

// reverselink.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"struct Node{    int num;    struct Node*next;};typedef struct Node Node;Node * createLink(){    Node *head=NULL,*urn,*tail;    int data;    cin>>data;    while(data>0){        urn=(Node*)malloc(sizeof(Node));        urn->num=data;        if(head==NULL)            tail=head=urn;        else{            tail->next=urn;            tail=tail->next;        }        cin>>data;    }    if(head!=NULL)        tail->next=NULL;    return head;}void printNode(Node*head){    Node *p=head;    while(p!=NULL){        cout<<p->num<<" ";        p=p->next;    }    return;}int _tmain(int argc, _TCHAR* argv[]){    cout<<"Enter the numbers:"<<endl;    Node *head=createLink();    int k=2;    stack<Node*> ss;    int i;    Node *la=NULL,*tail=NULL,*lb=head;    while(lb!=NULL){        i=0;        Node *top;        top=lb;        while(lb!=NULL&&i<k){            ss.push(lb);            lb=lb->next;            i++;        }        if(i==k){            while(!ss.empty()){                if(la==NULL)                    la=tail=ss.top();                else{                    tail->next=ss.top();                    tail=tail->next;                }                ss.pop();            }            if(lb==NULL)                tail->next=NULL;        }        else{            tail->next=top;        }    }    head=la;    printNode(head);    getchar();    getchar();    return 0;}

 

9月10日,美团网2014校招研发笔试哈尔滨站 1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现