【数据结构】单链表的逆序输出(两种方法)

您所在的位置:网站首页 超简单的逆序输出 【数据结构】单链表的逆序输出(两种方法)

【数据结构】单链表的逆序输出(两种方法)

2023-12-04 18:15| 来源: 网络整理| 查看: 265

第一种方法:转换指针方向

即:将一个已经创建好的单链表进行指针域的改变

今天突然被问到单链表逆序的问题,弄了好久才看出别人的程序有啥问题,就重新写了一遍。

今天才在CSDN客户端上看到美团的面试题是冒泡排序。

一个看似简单的问题难倒很多人,所以简单的不要因为他简单就忽视它,人们在简单的问题上越容易犯错!!!!

#include #include typedef struct link_node { int info; struct link_node *next; }N; N *init() { return NULL; } N *creat(N *head) { N *p,*q; int x; scanf("%d",&x); while(x!=-1) { p=(N*)malloc(sizeof(N)); p->info=x; p->next=NULL; if(!head) { head=p; q=p; } else { q->next=p; q=p; } scanf("%d",&x); } return head; } void display(N *head) { N *p=head; if(head==NULL) { printf("dispaly none\n"); return ; } while(p) { printf("%5d",p->info); p=p->next; } printf("\n"); } int length(N *head) { N *p=head; int count=0; while(p) { count++; p=p->next; } return count; } N *exchange(N *head) { N *p=head,*q,*r; if(!head) { printf("exchange none\n"); return head; } if(head && !head->next) { return head; } q=p->next; r=q->next; p->next=NULL; while(r) { q->next=p; p=q; q=r; r=r->next; } q->next=p; head=q; return head; } int main () { N *head; int count=0; head=init(); head=creat(head); display(head); head = exchange(head); display(head); return 0; }

 

第二种方法:双向链表 #include #include #include using namespace std; typedef struct node { int data; struct node *rlink,*llink; }N; N *p,*front=NULL,*q,*rear=NULL; void creat() { int x; scanf("%d",&x); while(x!=-1) { p=(N*)malloc(sizeof(N)); p->data=x; if(front==NULL) { p->llink=NULL; front=p; q=p; } else { p->llink=q; q->rlink=p; q=p; } p->rlink=NULL; scanf("%d",&x); if(x==-1) { rear=q; } } return ; } void print() { p=front;q=rear; printf("正序输出:"); while(p) { printf("%d ",p->data); p=p->rlink; } printf("\n逆序输出:"); while(q) { printf("%d ",q->data); q=q->llink; } printf("\n"); return ; } int main () { creat(); print(); return 0; }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3