输入一个链表的头结点,从尾到头反过来输出每个结点的值

来源:互联网 发布:网络推广的手段有哪些 编辑:程序博客网 时间:2024/03/28 18:51

题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:

struct ListNode
{
  int  m_nKey;
  ListNode* m_pNext;
};


这题我目前有两个思路,把这个链表做成反向链表,另一个是用递归的方法。其实还可以用栈来实现,但是考虑到栈比较麻烦就算了。


递归方法:

#include<stdio.h>#include<stdlib.h>struct ListNode{  int  m_nKey;  ListNode* m_pNext;};void Display(struct ListNode *listnode){if(listnode==NULL)return ;else{Display(listnode->m_pNext);printf("%d ",listnode->m_nKey);}}int main(){struct ListNode *listnode ;listnode=(struct ListNode *)malloc(sizeof(struct ListNode));listnode->m_nKey=10;listnode->m_pNext=NULL;struct ListNode *temp;temp=(struct ListNode *)malloc(sizeof(struct ListNode));temp->m_nKey=5;temp->m_pNext=listnode;listnode=temp;Display(listnode);getchar();return 0;}




链表反转

#include<stdio.h>#include<stdlib.h>struct ListNode{  int  m_nKey;  ListNode* m_pNext;};struct ListNode * ReverNode( struct ListNode *listnode ){if(listnode==NULL )return NULL;struct ListNode *pre=NULL;struct ListNode *temp=listnode;struct ListNode *p_temp=listnode;while(p_temp!=NULL){//一定要注意这里的顺序,,ABCD ,比如p_temp现在指在 B 处,你要先把 p_temp 的指针指向 C ,//才能将 B 指向 A ,否则 CD 会丢掉的。然后还要将 B 记录下来,不然你等下也找不到呢。p_temp=p_temp->m_pNext;temp->m_pNext=pre;pre=temp;temp=p_temp;}return pre;}void Display(struct ListNode *listnode){struct ListNode *tempnode=listnode;while(tempnode!=NULL){printf("%d ",tempnode->m_nKey);tempnode= tempnode->m_pNext;}printf("\n");}int main(){       struct ListNode *listnode ;struct ListNode *tempnode ;listnode=(struct ListNode *)malloc(sizeof(struct ListNode));listnode->m_nKey=10;listnode->m_pNext=NULL;        //弄了两个数据测试一下。tempnode=(struct ListNode *)malloc(sizeof(struct ListNode));tempnode->m_nKey=5;tempnode->m_pNext=listnode;listnode=tempnode;listnode=ReverNode( listnode);Display(listnode);getchar();return 0;}





0 0
原创粉丝点击