当前位置: 代码迷 >> C语言 >> 一个面试c程序
  详细解决方案

一个面试c程序

热度:240   发布时间:2008-05-31 20:11:12.0
额```

比如连表中某一段 1-2-3-4

程序会让1指向3,下一个循环的时候还会让1指向4````  

= = 没看错吧
----------------解决方案--------------------------------------------------------
呵呵,其实不难理解的

[color=white]
----------------解决方案--------------------------------------------------------
程序代码:

node_t * ChangeTwoNodes(node_t *list)
{
    node_t *pret=(list&&list->next?list->next:list), *p, *t;
    if(pret==list) return list;
    for (p=list->next; (t=p->next) && (list->next=t->next); list=t,p=list->next)
    {
        p->next=list;
    }
    p->next=list;list->next=t;
    return pret;
}


~~~~~~~~~   我的意思就是这样```
发现该过之后 虽然没有了重复赋值,但多了一个临时变量的赋值```  看来一样``  先吃饭 一会想想能不能更好
----------------解决方案--------------------------------------------------------
LS用我前面贴的代码接口测试一下你的函数吧.....
----------------解决方案--------------------------------------------------------
代码画画就好了。。不难理解,关键不要画错了就好。。呵呵
----------------解决方案--------------------------------------------------------
[bo][un]中学者[/un] 在 2008-5-31 20:44 的发言:[/bo]

LS用我前面贴的代码接口测试一下你的函数吧.....


啥意思```   错了吗?

```````````````````````````

算法上似乎不能再精简了``
----------------解决方案--------------------------------------------------------
呵呵,没...
----------------解决方案--------------------------------------------------------
///雨燕的 node_t *pret=list->next?list->next:list, *p, *t;///

什么意思?看不懂,
我写的,典型科班写法

LNode* Change1(LNode* &HL)
{
    LNode* cp,*ap;
    if(HL==NULL||HL->next==NULL)
        return NULL;
    else
    {
        cp=HL;
        ap=cp->next;
        cp->next=ap->next;
        ap->next=cp;
        HL=ap;
        Change(cp->next);
    }
    
}
----------------解决方案--------------------------------------------------------
尾递归……
LS的兄弟,尾递归麻烦手工优化下嘛,又不会死……
----------------解决方案--------------------------------------------------------
~!!!!!!!!!!
----------------解决方案--------------------------------------------------------
  相关解决方案