单链表逆转

6-1 单链表逆转 (20分) 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ L是给定单链表,函数Reverse要返回被逆转后的 阅读详情

               1.算法描述

          单链表逆转,就是把链表中 各结点的next域改为指向其前驱结点,原先第一个结点的next域为空,head改为指向原先的最后一个结点。逆转算法描述如下:

          设p指向单链表中的某个结点,front指向p的前驱结点,则使p.next指向前驱的语句是

                                                                                                      p.next = front

         执行该语句之后将使p.next原指向后继的链断开,因此需要用另外的一个结点来保存p的后继结点。这三个结点引用同时沿单链表向后移动。

        2.算法之java实现

           本程序是在SinglyLinkedList类(单链表类)的基础上增加的单链表逆转功能,因此声明继承SinglyLinkedList类

package linearList;

public class ReverseLinkedList<E> extends SinglyLinkedList<E>{
	public ReverseLinkedList(){
		super();//调用父类同参数的构造方法
	}
	
	/*
	 * 逆转单链表
	 */
	public void reverse(){
		Node<E> p = this.head,q = null,front = null;
		while(p!=null){
			q = p.next;//设置q是p结点的后继结点,即用q来保持p的后继结点
			p.next = front;//逆转,即使p.next指向p结点的前驱结点
			front = p;//front向后移一步
			p = q;//p向后移一步
		}
		this.head = front;//head指向原链表的最后一个结点,完成逆转
	}

	public static void main(String[] args) {
		ReverseLinkedList<Integer> list = new ReverseLinkedList<Integer>();
		for(int i=1;i<6;i++){
			list.add(0, new Integer(i));
		}
		System.out.println("单链表"+list.toString());
		list.reverse();
		System.out.println("逆转后"+list.toString());
	}
}
程序执行结果如下:

                            单链表(5,4,3,2,1)
                            逆转后(1,2,3,4,5)


3-5 单链表分段逆转 pta 3-5 单链表分段逆转 (20分) 给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4;如果 K=4,则应该得到 4→3→2→1→5→6。 函数接口定义: void K_Reverse( List L, int K ); 其中List结构定义如下: typedef struct Node PtrToNode; struct Node { ElementType Data; / 存储结点数据 阅读详情

相关推荐

数据结构--线性表的链式存储结构(单链表完全实现)、单链表反转

线性表的链式存储结构 单链表节点类 public class Node<T> { //数据域,保存数据元素 public T data; //地址域,引用后继节点 public Node<T> next; public Node(){ this(null,null); } public Node...

吴声子夜歌的博客 834

如何将单链表逆转(超详细)

单链表逆转方法有很多,我也从很多博主那学习看到了各种各样的方法。今天就给大家总结一下个人认为较简便的四种方法。这四种方法不用开辟新的空间,所以不会造成空间浪费。 方法一:迭代 采用迭代的基本思路如下:我假设链表为1->2->3->4,那么但我完成链表的逆转后就应该是4->3->2->1。我将链表的头结点设为L,同时开辟两个新的节点q和p,我将利用L,q,p三个节点来进行迭代。 List Reverse(List L) { List p, q; .

weixin_55859275的博客 1万+

单链表反转(逆置)——(四种方法实现)

链表逆置就是把最后以一个提到坐面,倒数第二个放到第二个……直到第一个到最后一个。 由于链表没有下标,所以不能借助下表来实行数据的逆置,要靠空间的转移来完成链表的逆置 这里采用没有头节点的链表来实现逆置。 第一种——头插法 算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。 #include <stdio.h> #include <stdli...

m0_58397166的博客 8万+

数据算法之反转链表(五种方法

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]这道题来自力扣的第206题,今天我们尝试使用五种不同的方法来实现链表的反转。

weixin_63834061的博客 6858

单链表逆转的2种方法

单链表逆转方法有很多: 这里谈两种: 1.再建一个链表然后,边遍历原来的链表,便是用头插法,完成新的单链表,这样子虽然内存损耗比较大,但是也是勉强可以完成的。 2.使用3个指针,逐个节点逆转。 p q两个指针分别指向想要逆转关系的两个节点, p指向一个节点,q指向后一个节点 r指向q后余下的链表。 具体操作: 这里我们忽略头节点,也是说连带头节点一起逆转。 初始化操作: p...

FREE_CODER 1万+

单链表分段逆转

3-5 单链表分段逆转 (20 分) 给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4;如果 K=4,则应该得到 4→3→2→1→5→6。 函数接口定义: void K_Reverse( List L, int K ); 其中List结构定义如下: typedef struct...

wsl1530319_的博客 2628

单链表逆转

http://blog.sina.com.cn/s/blog_4e356ecd0100ago4.html 单链表逆转过程的关键是3个指针:一个记录当逆转节点一个节点,一个记录当逆转节点的下一个节点,另外一个则记录当逆转节点。为什么要3个指针呢?其原因就在于当修改了当逆转节点next域后(逆转),链表就暂时断了(即无法再定位下一个节点),因此需要一个指针记录其下一个节点位置(要能够

Yujun_Wu的专栏 787

6-1 单链表逆转

6-1 单链表逆转(20 分) 本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /*...

LMengi000的博客 2万+

C语言单链表逆转

       单链表逆转是一个基础的数据结构题,做起来不难。和解决这个问题一起写的还有做题的规矩,不能因一个问题简单就直接开始写代码,对于初学者来说,写代码先写一个程序的大致框架是很有用的。 解题思路:        创建一个单链表,遍历这个链表并且以头插...

吴立赛的博客 1514
上一篇: 单链表之递归算法
下一篇: 带头结点的单链表
thinkpadshi
博客等级 码龄16年 204粉丝 114原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值