题解 | #牛牛的链表交换#

牛牛的链表交换

http://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc

#include <stdio.h>
#include <stdlib.h>

typedef struct list{
    int data;
    struct list *next;
}list,*linklist;

//链表内容打印
void ptink(list *head)
{
        struct list *point=head;

        while(point!=NULL)
        {
                printf("%d ",point->data);
                point=point->next;//while里面的判断其实是在判断point->next是否为NULL
        }
        putchar('\n');
}
//链表结点个数计算
int get_Node_nums(list *head)
{   
    list *point=head;
    int num=0;
    while(point!=NULL)
    {
        num++;
        point=point->next;
    }
    return num;
}
#if 1
list *exc(list *head)  //前面两个交换 
{
    list *point=head;
    int t,n;
    n=get_Node_nums(head)-2;
    if(get_Node_nums(head)==1)
    {
        return point;
    }
    else if(get_Node_nums(head)==2)
    {
        t=point->data;
        point->data=point->next->data;
        point->next->data=t;
        return point;
    }
    else if(get_Node_nums(head)>2)
    {
        t=point->data;
        point->data=point->next->data;
        point->next->data=t;
        list *p=point; 
        while(n--)
        {
            p = p->next ;
        }
        t=p->data;
        p->data=p->next->data;
        p->next->data=t;
    }
    return point;
}

int main()
{
    int i,n;    
    scanf("%d",&n);
    int arr[n];    
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]); 
    }
    //链表的创建
    list *headList = NULL;
    list *arrList = NULL;
    list *excList = NULL;
    //这里用头插法 
    for(i=n-1;i>=0;i--)
    
        arrList = (list *)malloc(sizeof(list));
        arrList->data = arr[i]; 
        arrList->next =headList;  //将headList放在arrList->next,即arrList的数据是放在headList的前面的 
        headList = arrList;  //再将headList指向arList保证头是headList 
    }
    excList=exc(headList);
    ptink(excList);
    return 0;
}
#endif
全部评论

相关推荐

对空六翼:你真幸运,碰见这么好的人,不像我,秋招的时候被室友骗进cx了
实习好累,可以辞职全力准...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务