链表逆序面试题
2012-05-27 19:20
363 查看
一道面试题:将单向链表按如下规则逆序:
5->4->3->2->1: pHead->5;pStart->3;
逆序结果:3->4->5->1->2 ;
5->4->3->2->1; pHead->5,pStart->1;
逆序结果:1->2->3->4->5;
5->4->3->2->1; pHead->5;pStart->5;
逆序结果:5->1->2->3->4;
要求不能分配新的链表节点,只能使用临时指针变量,将链表按上述规则逆序.
思路:
将pStart后的链表逆序,再将pStart前的链表逆序,然后将pStart后的链表直接接在后面即可;
测试代码如下:
5->4->3->2->1: pHead->5;pStart->3;
逆序结果:3->4->5->1->2 ;
5->4->3->2->1; pHead->5,pStart->1;
逆序结果:1->2->3->4->5;
5->4->3->2->1; pHead->5;pStart->5;
逆序结果:5->1->2->3->4;
要求不能分配新的链表节点,只能使用临时指针变量,将链表按上述规则逆序.
思路:
将pStart后的链表逆序,再将pStart前的链表逆序,然后将pStart后的链表直接接在后面即可;
测试代码如下:
SinglyLinkNode *ReverseNode(SinglyLinkNode *pHead,SinglyLinkNode *pStart) { SinglyLinkNode *pTmp=pStart ; SinglyLinkNode *pTmp1=NULL ; SinglyLinkNode *pTmp2=NULL ; if(pTmp->next!=NULL&&pTmp->next->next!=NULL) {//reverse the latter part pTmp1=pTmp->next->next->next ; pTmp2=pTmp->next ; pTmp->next=pTmp->next->next ; pTmp->next->next=pTmp2 ; pTmp2->next=NULL ; while(pTmp1!=NULL) { pTmp2=pTmp1->next ; pTmp1->next=pTmp->next ; pTmp->next=pTmp1 ; pTmp1=pTmp2 ; } } pTmp=pTmp->next ; if(pHead!=pStart&&pHead!=NULL&&pHead->next!=NULL) {//reverse forebody pTmp1=pHead->next ; pTmp2=pHead->next->next ; pHead->next=NULL ; pTmp1->next=pHead ; pStart->next=pTmp1 ; while(pTmp2!=pStart) { pTmp1=pTmp2 ; pTmp2=pTmp2->next ; pTmp1->next=pStart->next ; pStart->next=pTmp1 ; } } pHead->next=pTmp ; return pStart ; } int main() { int a[]={5,4,3,2,1} ; SinglyLinkNode *pHead=CreateLinkList(a,sizeof(a)/sizeof(a[0])) ; printf("Origin Order:\n") ; PrintLinkNode(pHead) ; SinglyLinkNode *pTmp=GetNode(pHead,0) ; printf("Node:%d",pTmp->value) ; pHead=ReverseNode(pHead,pTmp) ; printf("Reverse Order:\n") ; PrintLinkNode(pHead) ; }
相关文章推荐
- 【面试题】剑指offer05--逆序打印链表
- 顺序表链表经典面试题之逆序打印单链表
- 剑指offer面试题java实现之题5:逆序打印链表
- 链表面试题(二)---链表逆序(链表反转)
- 面试题16:链表逆序
- iOS 算法面试题(冒泡排序、选择排序、链表逆序)~demo
- 链表面试题--两种方法逆序打印单链表(栈和递归)
- 链表面试题(一):逆序打印链表、无头链表删除插入节点、约瑟夫环、逆置单链表
- 面试题:用一个临时变量实现单链表逆序
- 链表面试题-逆置单链表和逆序打印单链表
- 记一道关于链表逆序的面试题
- 面试题:用 Java 逆序打印链表
- 面试题【3】链表的逆序打印
- 链表面试题逆序打印,删除无头非尾节点,非头位置插入,约瑟夫环,查找中间和倒数第k个节点
- 单链表逆序——华三、Intel面试题之一
- 常见C语言面试题之九:链表逆序
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- 链表面试题
- 删除链表中的重复节点、剩余节点逆序输出
- 【数据结构_链表_List_0957】逆序输出链表