剑指offer-面试题16.反转链表

时间:2022-09-13 20:56:57

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的头结点

链表结点定义如下:

 struct ListNode
{
int m_nKey;
ListNode* m_pNext;
}

其实反转链表主要是链表指针的操作,一定要很清楚才行。

其实在面试题5,从尾到头打印链表的第一种方式已经实现了

这种方式:

这里在梳理下反转链表的过程:

比如链表:1->2->3->4->5->6

1.定义三个指针p1,p2,p3

2.p1指向1,p2指向2,p3指向3

3.p2->next=p1;然后p1=p2,p3=p2

4.这时1<-2  3->4->5->6 p1指向2,p2指向3,p3指向4

5.重复第4步(p2->next=p1,p1=p2,p3=p2,此时1<-2<-3 4->5->6 依次类推)

6.结束条件为p2==NULL,最后将头结点的next指向NULL即可

实现如下:

 #include <iostream>
using namespace std; struct ListNode
{
int data;
struct ListNode *next;
}; struct ListNode* CreateList()
{
struct ListNode* Head,*p;
Head=(struct ListNode*)malloc(sizeof(ListNode));
Head->data=;
Head->next=NULL;
p=Head; cout<<"Create List....(0-exit!)"<<endl;
while(true)
{
int Data;
cin>>Data;
if(Data!=)
{
struct ListNode* NewNode;
NewNode=(struct ListNode*)malloc(sizeof(ListNode));
NewNode->data=Data;
NewNode->next=NULL;
p->next=NewNode;
p=p->next;
}
else
{
break;
}
} return Head->next;
} void PrintList(struct ListNode* Head)
{
cout<<"The List is: "; struct ListNode *p;
p=Head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
} struct ListNode* ReversePrint(struct ListNode* Head)
{
struct ListNode *p1,*p2,*p3; p1=Head;
p2=p1->next; while(p2!=NULL)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
} Head->next=NULL;
return p1;
} int main()
{
ListNode *Head,*NewHead;
Head=CreateList();
PrintList(Head);
NewHead=ReversePrint(Head); cout<<endl<<"The Reverse List is:"<<endl;
PrintList(NewHead);
return ;
}

运行截图:

剑指offer-面试题16.反转链表

剑指offer-面试题16.反转链表的更多相关文章

  1. 剑指Offer&colon;面试题16——反转链表&lpar;java实现&rpar;

    问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...

  2. 剑指Offer - 九度1518 - 反转链表

    剑指Offer - 九度1518 - 反转链表2013-11-30 03:09 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试 ...

  3. 剑指Offer面试题:14&period;链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  4. 剑指offer 面试题35&period;复杂链表的复制

    时间O(N),空间O(N) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomList ...

  5. C&plus;&plus;版 - 剑指offer 面试题16:反转链表&lpar;Leetcode 206&colon; Reverse Linked List&rpar; 题解

    面试题16:反转链表 提交网址: http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId= ...

  6. 【剑指offer 面试题16】反转链表

    思路: 用三个指针preNode.curNode.nextNode完成. #include <iostream> using namespace std; struct ListNode ...

  7. 剑指Offer面试题16(Java版):反转链表

    题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 解决与链表相关的问题总是有大量的指针操作.而指针操作的代码总是easy出错的. 非常多的面试官喜欢出链表相关的问题,就是 ...

  8. 剑指offer(15)反转链表

    题目描述 输入一个链表,反转链表后,输出链表的所有元素. 题目分析 至少需要三个指针pPre(指向前一个结点).pCurrent(指向当前的结点,在代码中就是pHead).pPnext(指向后一个结点 ...

  9. 剑指offer十五之反转链表

    一.题目 输入一个链表,反转链表后,输出链表的所有元素. 二.思路 详细分析见代码注释 三.代码 public class Solution {     public ListNode Reverse ...

  10. 剑指offer——面试题16:数值的整数次方

    // 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需 ...

随机推荐

  1. 图片懒加载jquery lazyload

    <script type="text/javascript" src="jquery-1.11.3.min.js"></script>& ...

  2. 25款响应式,支持视网膜显示的 Wordpress 主题

    响应式和现代设计风格的多用途 WordPress 主题与能够非常灵活的适应所有设备.而高级主题能够更大可能性的轻松定制.所有的主题是完全响应式的,您可以从主题选项中禁用/启用响应模式. 多用途的响应式 ...

  3. javascript笔记6-DOM

    DOM(文档对象模型)是针对HTML和XML文档的一个API.DOM描绘了一个层次化的节点树,允许程序员添加.修改页面的一部分. 节点层次:DOM可以将任何HTML或XML文档描绘成一个由多层次节点构 ...

  4. 微信訪问页面,莫名其妙刷新两次,火狐、谷歌、ie无问题

    做微信刮刮卡活动,有个用户刮奖次数的限制,昨天一切正常,所以就修改了一些东西,今天再打开的时候刮奖次数第一次是1,第二次是3,第三次是5.感觉就是页面刷新了两遍. 检查前后台代码.发现一些bug就顺手 ...

  5. linux sdio card睡眠治疗 sdio card removed解决方案

    近期调试几款sdio card suspend时都会出现sdio card removed,之后 要么死机要么模块不能正常工作.根本原因也就是休眠没有处理好.昨天最终找到了 解决方法. 1:host端 ...

  6. 1&period;移植uboot-分析uboot启动流程&lpar;详解&rpar;

    本节总结: uboot启动流程如下: 1)设置CPU为管理模式 2)关看门狗 3)关中断 4)设置时钟频率   (FCLK:HCLK:PCLK=1:2:4,FCLK=120Mhz) 5)关mmu,初始 ...

  7. Xamarin&period;Android AlertDialog中的EditText打上去字为什么不显示&quest;也没有光标闪烁

    AlertDialog.Builder builder = new AlertDialog.Builder(this);            builder.SetTitle("请您输入管 ...

  8. 大数据 --&gt&semi; Spark和Hadoop作业之间的区别

    Spark和Hadoop作业之间的区别 熟悉Hadoop的人应该都知道,用户先编写好一个程序,我们称为Mapreduce程序,一个Mapreduce程序就是一个Job,而一个Job里面可以有一个或多个 ...

  9. Python-form表单标签

    语义:标记表单 #1.什么是表单? 表单就是专门用来接收用户输入或采集用户信息的 #2.表单的格式 <form> <表单元素> </form> 链接:https:/ ...

  10. I&period;MX 6UL与6ULL应用领域区别