| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1627 人关注过本帖
标题:单项链表逆序
只看楼主 加入收藏
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:0 
gotoxy()就用来在dos窗口定光标的位置的,你顺序的遍历,在逆向的坐标位置打印。
有三个元素a,b,c
你遍历 a  时,在(0,2)的位置打印
你遍历 b 时,在(0,1)的位置打印
你遍历 c  时,在(0,0)的位置打印

2011-12-08 23:12
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:2 
我们一般的dos窗口是一个85*50的字符,从上往下是"+y",从左到右是"+x"
就是三个坐标点,向上到下
下面就是我们窗口的坐标:
我们用gotoxy()可以跑到你想要到的窗口打印
(0,0)(1,0)(2,0)(3,0)
(0,1)(1,1)(2,1)(3,1)
(0,2)(1,2)(2,2)(3,2)
(0,3)(1,3)(2,3)(3,3)
2011-12-08 23:18
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:1 
递归

Link *head

void print(Link *_pl){
    if(_pl!=NULL){
        print(_pl->next);
    else
        return;
    printf(...);
}
2011-12-09 09:02
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:1 
压栈

vector<Link*> _vec;
Link *head;
while(head){
  _vec.push_back(head);
  head = head->next;
}
while(_vec.size()){
   Link *lp = _vec.pop_back();
   printf(...);
}
2011-12-09 09:09
a771270076
Rank: 2
等 级:论坛游民
帖 子:5
专家分:23
注 册:2011-12-9
收藏
得分:0 
回复 10楼 zjslwyp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
    int no;
    char name[20];
};

struct node
{
    struct student stu;
    struct node *pNext;
};

void printNode(struct node *pHead)
{
    if(NULL == pHead)
        return;
    else
    {
        printNode(pHead->pNext);
        printf("学号:%d\t,姓名:%s\n",pHead->stu.no,pHead->stu.name);
    }

}

int main(void)
{
    struct node *pHead = NULL;
    struct node *pTemp = NULL;
    struct node *p ;
    pHead = (struct node *)malloc(sizeof(struct node));
    pTemp = pHead;
    pTemp->stu.no = 1;
    strcpy(pTemp->stu.name,"张三");
   
    p = (struct node *)malloc(sizeof(struct node));
    p->stu.no = 2;
    strcpy(p->stu.name,"李四");
    p->pNext=NULL;
   
    pTemp->pNext = p;

    pTemp = pHead;
    while(pTemp->pNext)
    {
        pTemp = pTemp->pNext;
    }
     p = (struct node *)malloc(sizeof(struct node));
    p->stu.no = 3;
    strcpy(p->stu.name,"王五");
    p->pNext=NULL;
    pTemp->pNext = p;
    printNode(pHead);

    return 0;
}



不建议使用递归,内存消耗太大了。。。。
2011-12-09 09:57
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
楼上不也是递归么?而且还只是递归地逆序显示而已,链表并没有被反转。
这里根本用不着递归,简单地将链表指针反转一下就可以了。只需要三个辅助指针变量,线性时间完成。
送一段实现这一功能的代码,随手敲的,也没调试,不过应该没什么问题。
函数参数为头结点指针,返回值为反转后的头结点指针。
程序代码:
Link * reverse(Link * head)
{
    Link *pre, *cur, *next;
    for(pre = NULL, cur = head; cur != NULL; cur = next)
    {
        next = cur->m_next;
        cur->m_next = pre;
        pre = cur;
    }
    return pre;
}

重剑无锋,大巧不工
2011-12-09 17:07
快速回复:单项链表逆序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015396 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved