《剑指Offer》面试题:反转链表
2015-09-04 20:12
597 查看
在这篇博文中:《剑指Offer》面试题:从尾到头打印链表,就应用过反转链表,这里重新又写里一篇。
实现代码如下
实现代码如下
/* 反转链表 */ #include<stdio.h> #include<string.h> #include<stdlib.h> typedef int ElementType; //定义一个结构体 struct ListNode{ ElementType mValue; ListNode *pNext; }; ListNode *createList(){ ListNode *pHead=NULL; ElementType val; scanf("%d",&val); while(val!=-1){ ListNode *pCurrentNode; ListNode *pNewNode; pNewNode=(ListNode *)malloc(sizeof(pNewNode)); if(pNewNode==NULL){ exit(EXIT_FAILURE); } pNewNode->mValue=val; pNewNode->pNext=NULL; if(pHead==NULL){ pHead=pNewNode; pCurrentNode=pHead; } else{ pCurrentNode->pNext=pNewNode; pCurrentNode=pNewNode; } scanf("%d",&val); } return pHead; } ListNode* reverseList(ListNode * pHead){ if(pHead==NULL){//先检查下头结点是否有效 return NULL; } ListNode *preNode=NULL; ListNode *currNode=pHead; ListNode *next; while(currNode->pNext!=NULL){ next=currNode->pNext; currNode->pNext=preNode; preNode=currNode; currNode=next; } //反转最后一个结点 pHead=currNode; currNode->pNext=preNode; return pHead; } void printList(ListNode *pHead){ if(pHead==NULL){ return ; } while(pHead->pNext!=NULL){ printf(" %d ",pHead->mValue); pHead=pHead->pNext; } //输出最后一个结点 printf(" %d\n ",pHead->mValue); } int main(void){ //第一步:在反转链表之前,先创建链表 ListNode *pHead=createList(); //为便于观察链表的结点,因此写一个输出链表的函数 printList(pHead); //第二步:反转链表 pHead=reverseList(pHead); printList(pHead); return 0; }
相关文章推荐
- 剑指offer——面试题41:(一)和为s的两个数字
- Hibernate学习之面试问题汇总
- 腾讯面试(一)
- 腾讯面试(二)
- 一位39岁程序员的困惑:知道得越多编程越慢怎么办?
- 程序员的回归式进化
- 黑马程序员—————Java基础--------多线程
- 程序员的人生规划
- 面试热问——你的职业规划是什么?
- 推荐!国外程序员整理的机器学习资源大全
- 黑马程序员java之IO_2
- 黑马程序员java之IO_1
- 黑马程序员java之集合框架Map
- 黑马程序员java之集合框架Collection
- 黑马程序员--OC封装
- 黑马程序员Java之常用API
- 面试中常考的指针问题
- 程序员养成记
- 黑马程序员java之多态和异常
- 黑马程序员java之面向对象封装与继承