逆转链表的小代码,求问错误在哪里呐~

List Reverse( List L )
{
PtrToNode p1=p2=p3=NULL;
p1=p2=p3=L;
p2=p1->Next;
p3=p2->Next;
p1->Next=NULL;
while(p2!=NULL)
{
p2->Next=p1;
p1=p2;
p2=p3;
if(p3!=NULL)
p3=p3->Next;
}
L->Next=p1;

        return L;

}

0
扫码支付0.1元 ×
其他相关推荐
经典算法学习——逆转链表
链表在数据结构中是一种非常重要的线性数据结构,也是各类面试笔试中常常涉及的问题。其中最常见的一个问题就是“输入一个链表的头结点,从尾到头反过来打印出每个节点的值”,简单说就是逆转链表。当然,有人会发现,这其实就是剑指Offer中的一道题。这道题的实现我已经上传至  https://github.com/chenyufeng1991/ReverseLinkedList_Stack 。      这道
线性结构:单向链表的逆转
逆转单向链表的意思就是,给定你一个单向链表,和一个整数N,N为要逆转的结点数,要求你把链表从头结点到第N个结点给逆转过来。意思是这样的,如下图所示:(逆转1)给出一个单向链表,和给定整数N=4,也就是要求把该链表从头结点(Head->Next)开始到第四个结点,把他们逆转过来,像下面逆转后头结点由1变成了4,然后1后来链接5。那么如何去实现这样的逆转链表?既然要改变结点的序列,我们自然而然想...
求单链表的最大值与原地逆转
数据结构链表一章已学习完毕,因此编了一个程序用以实现链式表的构建,插入,查找,求最大值,以及原地逆转。 除了求最大值与原地逆转之外都是常规操作,不再赘述,着重分析最大值与逆转的算法。 一、最大值的求解:通过max函数实现,定义结构体指针p指向l的首元节点,max初值为p->data,通过if判断是否有更大的数,将更大的数赋值给max,同时p指向下一个节点,由此求出最大的数。代码如下: voi
【算法】Java单链表逆转
单链表逆转置的递归与非递归方式Node类public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } 先看递归求解:public ListNode reverse1(ListNode head) { // 当为空或者本节点为末尾节点的时候
单链表的原地逆转 (只遍历一次)
单链表 (扩展问题):给定一个链表的头指针,要求只遍历一次,将单链表中的元素的顺序翻转过来。 //头插法,额外增加三个指针。 void ReverseLinkList(LinkList& Head) {        LinkList p,r,temp;        p=Head->Next;        temp=p;        r=p->Next;        whi
PTA 数据结构与算法题目集(中文)6-1 单链表逆转
6-1 单链表逆转(20 分)本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L ); 其中List结构定义如下:typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ ...
单链表的操作(创建、查找、插入、删除、遍历、就地逆转等)
先贴原代码,后面再一一做解释。 /* 单链表的各创建等等操作 日期:2017年11月3日 21:46 */ #include "stdafx.h" #include <iostream> #include "stdlib.h"
两种方法(递归,非递归)实现单链表的逆转
用普通方法和递归的方法实现单链表的逆置
数据结构与算法-----单向线性链表(逆转和反向打印)
单向链表没有前指针,所以实现反向打印还是比较麻烦,我们这里使用递归原理解决此问题。 这里提到逆转,也就是将单链表的next指针指向前一个节点,我们也使用递归实现。// 练习:实现单向线性链表的建立、测长、正向打印和 // 反向打印 // 逆转 #include <iostream> using namespace std; class List { public: // 构造函数中初始化为
单链表的就地逆转 -- 浙大《数据结构》第二版 例2.4
在浙大版的《数据结构》的数据结构实现基础部分的链表部分看到这样的一个题目。 自己想了一个,结果不行,就看了解释以及代码,嗯,没错,看了好久才明白。 这个题目据说是很多公司的面试题,大致比较流行的有两种方法,一种叫”迭代法“,也就是用循环吧,这个有两种的思路(暂时算两种,这两种方法有点殊途同归的感觉,后面会具体分析到);另外一种是递归,这种方法等我学习到递归再来做一遍~ 先说一下浙大书
单链表的逆转:迭代形式和递归形式
struct Node { int num; Node *next; }; // 注意这个地方,这个分号占一半的分!!!1.迭代版的:(明明知道是这样子,但写的时候,要想很久,常考,背!!!)/* 注意 head是头结点 */ Node *ReverseLink( Node *head) { if(NULL == head) return NULL;
单链表逆转总结(原地+新建链表)
1 定义 单链表node的数据结构定义如下: class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } } 2 方法1:就地反转法 2.1 思路 把当前链表的下一个节点pCur插入到头结点dummy的下一个节点中,就地反转。...
6-1 单链表逆转
6-1 单链表逆转(20 分) 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /
链表的逆转的实现(c++语言)
链表逆转问题的c++语言实现方法,比较简单
单链表的就地逆转
线性链表就地逆转函数,用“砍头”法。 砍断头结点后,在头结点和Head指针的中间不断插入链表的结点,从而达到链表逆转的目的       链表的就地逆转: //线性链表就地逆转函数,用“砍头”法 //砍断头结点后,在头结点和Head指针的中间不断插入链表的结点,从而达到链表逆转的目的 void Reverse(LList *Head) { LList *PL1,*PLn,*
递归和非递归逆转链表
逆转链表可以采用递归或者非递归方法实现,以下方法都没有使用额外的存储节点做中转 #include using namespace std; struct ListNode{ int data; ListNode *next; }; void printLink(ListNode *head); ListNode *reverseLink1(ListNode *head); Li
单链表各种操作(逆向打印以及逆转)的c++实现
#include &amp;lt;iostream&amp;gt; using namespace std; class Node; class List{ public:     List(void):m_head(NULL),m_tail(NULL){}     ~List(void){         for(Node* next;m_head;m_head = next){             nex...
单链表的逆转 C语言
#include #include typedef struct node{ int data; struct node *next; }node; node * reverse(node * head) { node *p1,*p2,*p3; if(head==NULL||head->next==NULL) return head; p1=he
【算法设计-单链表的逆转】单链表逆转实现
1.在Θ(n)时间内将链表转置,而且只能需要少量的额外空间 这里需要用3个指针使得q指向p然后依次后移。 代码: #include using namespace std; typedef struct Node { int data; struct Node *next; }LinkList; LinkList* Create_End(); void printLi
单链表逆转(数据结构)
这题看了很多个版本,但基本看不懂,毕竟最怕就是没有注释自己来推,更准确点说,数据结构需要的是思路的传达而不是直接给个代码。最后在一个博主那里看到了他的思路详解,感觉需要学习一下。6-1 单链表逆转(20 分)本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L ); 其中List结构定义如下:typedef struct Node *PtrToNode;...
C语言指针-链表逆转
昨晚看到庭波老师的日志说要实习链表逆转,点进去看了下
单链表实现就地逆转
用顺序表实现就地逆转的程序但很简单,许多人对于用链表实现就地逆转有些困惑在这里,我将展示用头插法的方法实现就地逆转。原理是对于一个给定的链表,先将其头结点摘出来,接下来,依次将链表中的结点摘出来,用头插法插入到摘出来的头结点之后,知道将所有的结点都插入,那么就实现了链表的就地逆转。下面给的程序是严格的c语言程序,可以在gcc里面运行出来。并且有详细的注释,因而在这儿就不再赘述类,看下面的程序。
数据结构及算法——单链表逆转(C语言)(不间断更新)
题目来源:浙大程序设计类实验辅助教学平台 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; ...
java实现单链表逆转
import java.text.DecimalFormat; import java.util.Scanner; class Node{ int address; int data; int nextAddress; Node next; public Node(){ } public Node(Node next){ this.next = next; }
6-1 单链表逆转(20 point(s))
6-1 单链表逆转(20 point(s)) 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode
单链表逆转的2种方法。
单链表逆转方法有很多: 这里谈两种: 1.再建一个链表然后,边遍历原来的链表,便是用头插法,完成新的单链表,这样子虽然内存损耗比较大,但是也是勉强可以完成的。 2.使用3个指针,逐个节点的逆转。 p q两个指针分别指向想要逆转关系的两个节点, p指向前一个节点,q指向后一个节点 r指向q后余下的链表。 具体操作: 这里我们忽略头节点,也是说连带头节点一起逆转。 初始化操作: p...
单链表逆转(递归指针实现)
设有一个表头指针为h的单链表。试设计一个算法,通过遍历一趟链表,将链表中所有节点的链接方向逆转,如图2.27所示。要求逆转结果链表的表头指针h指向原链表的最后一个结点。 #include &amp;lt;iostream&amp;gt; #include &quot;SingleList.h&quot; using namespace std; int main() { List&amp;lt;int&amp;gt; test; ...
链表的逆转(头插法)
#include #include #include using namespace std; typedef struct node { int data; struct node*next; }node; node*creat() { node*head,*p,*q; char ch; head=(node*)malloc(sizeof(node)
//链表的原地逆转
//链表的原地逆转 #include<iostream>using namespace std;//结点 typedef struct node { int data; node *next; }node; //创建链表 node* create() { node *head,*p,*s; head=(node*)malloc(sizeof(node)); p
将一个整数逆转 Reverse Integer
题目源自于Leetcode。 Example1: x = 123, return 321 思路: 看到这题,一定要想到这几个问题。这就要看你这个人考虑问题是不是周到全面! 1、负数的情况,怎么处理? 2、原数后面有0,逆转之后怎么处理?  保留还是去掉? 3、逆转之后溢出怎么处理?  32位int的表示范围是–2,147,483,648 ~ 2,147,483,647。
【数据结构】将一段链表分段并逆转连接
    将一段链表分段并逆转连接: Node* Option(Node* L,int K,int Size){                                int i=0;  Node* List[Size/K+1];  int cnt=0;  Node* t1;  int j;  int flag=0;  Node* tr;    t1=L-&amp;gt;link;  Lis...
C++实现单链表的逆转
答: 方法一:把链表中各结点的next域指向其前驱结点,并将原先第一个结点的next域设为NULL,将head指向原先链表的最后一个结点,其具体实现如下: LinkNode* ReverseLink(LinkNode **head) { LinkNode *cur,*pre,*temp; cur=*head; pre=NULL; temp=NULL; while(cur!=NULL
单向链表逆转(带头结点)的两种方法
#include&amp;lt;iostream&amp;gt; #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; using namespace std; struct Node { struct Node * next; int v; }; // 创建带头结点的单向链表 Node * getLinkList() { Node* hea...
4-1 单链表逆转
本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ };
C语言实现单链表的逆转指定个数个元素
如有以下的链表  1-->2-->3-->4-->NULL,指定逆转前2个元素变为:2-->1-->3-->4 实现的代码如下(C语言): #include #include typedef struct Node { int data; struct Node * next; }Node; Node * createLink() // 创建带头节点的单链表 { Node *hea
6-1 单链表逆转(20 分)
6-1 单链表逆转(20 分)本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L ); 其中List结构定义如下:typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ ...
以每K个元素为一组逆转单链表
问题:给定一个链表,写一个函数来逆转链表中的每K个节点,K是一个给定的值。 例如: 输入:  1->2->3->4->5->6->7->8->NULL and k = 3  输出:  3->2->1->6->5->4->8->7->NULL.  输入:   1->2->3->4->5->6->7->80->NULL and k = 5 输出:  5->4->3->2->1->8->7
【C语言】字符串逆转
例如: 有一个字符数组的内容为:“student a am i”, 请你将数组的内容改为&quot;i am a student&quot;. (要求:不能使用库函数。 ) 分析: 这里需要两次逆转,先将字符串整体逆转,再将以空格分割的子串逆转 代码部分: 先用my_strlen函数计算字符串大小: int my_strlen(char * str) { int count = 0; while(*str) {...
面试热身——逆转一个单链表
面试最常见题之一(也许没有之一),原理简单,但如果不熟练的话,也容易把代码写复杂了。 下面是一个简洁的实现。 struct list { int value; struct list *next; }; typedef struct list LIST; LIST* reverse_list(LIST *head){ LIST* pre = NULL; LIST* next; w
链表原地反转
设链表节点为 [cpp] view plaincopy typedef struct tagListNode{       int data;       struct tagListNode* next;   }ListNode, *List;   要求将一带链表头List head的单向链表逆序。 分析:  
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 问果大数据学院 问什么学习java