单链表的逆转

原创 2018年04月15日 22:55:40
将单链表就地逆置,要求不创建新的结点

输入要求

先输入一个n,表示接下来要输入n个数
接下来一排输入n个数,构造链表。
详见样例输入。

输出要求

见样例输出

测试数据

输入示例

5
1 2 3 4 5

#include<stdio.h>
#include<stdlib.h> 

typedef int ElemType;	// 元素数据类型 

typedef struct LNode{
     ElemType   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList; 

void createLList(LinkList &L, int n); // 采用尾插法创建链表 
void inverseLList(LinkList &L); // 链表就地逆置,不创建任何结点 
void printLList(LinkList L); // 打印链表,每个数字后有一空格 

int main(){
	int n; 
	LinkList list;
	scanf("%d",&n);
	createLList(list, n);
	printLList(list); 
	inverseLList(list);
	printLList(list); 	
}

*************************************************************************************************************

#include<stdio.h>
#include<stdlib.h> 

typedef int ElemType;	// 元素数据类型 

typedef struct LNode{
     ElemType   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList; 

void createLList(LinkList &L, int n); // 采用尾插法创建链表 
void inverseLList(LinkList &L); // 链表就地逆置,不创建任何结点 
void printLList(LinkList L); // 打印链表,每个数字后有一空格 

int main(){
	int n; 
	LinkList list;
	scanf("%d",&n);
	createLList(list, n);
	printLList(list); 
	inverseLList(list);
	printLList(list); 	
}

void createLList(LinkList &L, int n){
	L = new LNode;
	L->next = NULL;
	LNode *r = L;
	for(int i=0;i<n;i++){
		LNode *p= new LNode;
		scanf("%d",&p->data);
		p->next = NULL;
		r->next = p;
		r = p;
	}
} 
void inverseLList(LinkList &L){ 
    LNode *PL1=L->next;  
    LNode *PLn=PL1->next;//Ïȱ£´æÍ·½áµãºóÃæÒ»¸ö½áµãµÄÖ¸Õ룬²»È»Í·½áµã¿³¶Ïºó½«¶ªÊ§ºóÃæµÄ½áµã  
    PL1->next=NULL;//¿³¶ÏµÚÒ»¸ö½áµã£¬Ò²¾ÍÊÇÍ·½áµã  
      
    while(PLn)  
    {  
        LNode *Tmp=PLn->next;//ÓÃTmp±£´æµ±Ç°½áµãµÄnext½áµãµÄÖ¸Õ룬ȷ±£¿³¶Ïµ±Ç°½áµãºó¶ªÊ§ºóÃæµÄ½áµã¡£  
        PLn->next=PL1;  
        L->next=PLn;  
        PL1=PLn;//PLn³ÉΪÏÂÒ»¸ö½áµãµÄnextÖ¸ÕëµÄÖ¸ÏòÄ¿±ê  
        PLn=Tmp;//PLn±ä³ÉÐèÒª²åÈëµÄ½áµãµÄÖ¸ÕëÁË  
    }  	
} 
void printLList(LinkList L){
	LNode *p = L->next;
	while(p){
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}

逆转线性单链表.doc

  • 2009年10月17日 13:38
  • 24KB
  • 下载

单链表的逆转 C语言

#include #include typedef struct node{ int data; struct node *next; }node; node * re...
  • chichangjing1
  • chichangjing1
  • 2013-03-08 13:07:07
  • 964

两种方法(递归,非递归)实现单链表的逆转

用普通方法和递归的方法实现单链表的逆置
  • nyist327
  • nyist327
  • 2014-09-23 20:36:35
  • 1629

【算法】Java单链表逆转

单链表逆转置的递归与非递归方式Node类public class ListNode { int val; ListNode next; ListNode(int x) { ...
  • bug_moving
  • bug_moving
  • 2016-10-06 13:25:03
  • 1762

单链表的就地逆转

线性链表就地逆转函数,用“砍头”法。 砍断头结点后,在头结点和Head指针的中间不断插入链表的结点,从而达到链表逆转的目的       链表的就地逆转: //线性链表就地逆转函数,用“...
  • denyz
  • denyz
  • 2013-12-30 14:31:36
  • 1468

4-1单链表逆转

学习完链表以后,在刷PTA的时候,遇见第一题就卡壳了,真是悲哀,是一道关于单链表逆转的,其实还是很简单的,不过因为搞错了位置,再加上其他函数也是第一次用C写,输出的一直是NULL,就把这段代码敲出来方...
  • hou_blog
  • hou_blog
  • 2015-11-25 14:02:32
  • 3039

C语言指针-链表逆转

昨晚看到庭波老师的日志说要实习链表逆转,点进去看了下
  • lsh670660992
  • lsh670660992
  • 2014-11-21 11:51:10
  • 1437

java实现单链表逆转

import java.text.DecimalFormat; import java.util.Scanner; class Node{ int address; int data; int ...
  • jiaomenglei
  • jiaomenglei
  • 2016-10-09 15:11:31
  • 814

4-1 单链表逆转 (20分)

本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L ); 其中List结构定义如下:typedef struct Node *PtrToNode; s...
  • wanmeiwushang
  • wanmeiwushang
  • 2016-06-16 17:10:48
  • 4866

【算法设计-单链表的逆转】单链表逆转实现

1.在Θ(n)时间内将链表转置,而且只能需要少量的额外空间 这里需要用3个指针使得q指向p然后依次后移。 代码: #include using namespace std; type...
  • wodeai1625
  • wodeai1625
  • 2015-05-07 20:32:19
  • 1527
收藏助手
不良信息举报
您举报文章:单链表的逆转
举报原因:
原因补充:

(最多只允许输入30个字)