实现一个双向链表的倒置功能(1->2->3 变成 3->2->1)

标签: 链表反转
12人阅读 评论(0) 收藏 举报
分类:

代码: https://download.csdn.net/download/bird73/10350235



一共三个java文件


ListNode.java

package com.li;

public class ListNode {
	
	
	private int data;
	
	private ListNode nextList;

	public int getData() {
		return data;
	}

	public void setData(int data) {
		this.data = data;
	}

	public ListNode getNextList() {
		return nextList;
	}

	public void setNextList(ListNode nextList) {
		this.nextList = nextList;
	}

	public ListNode(int data) {
		super();
		this.data = data;
	}


}

ConvertList.java

package com.li;

/**
 * 转换工具类
 */
public class ConvertList {

	/**
	 * 链表转换
	 */
	public static void convertListNode(ListNode node) {
		// 临时节点, 用于反转的节点
		ListNode preListNode = null;

		// 循环交换所有链表数据
		while (node != null) {

			// 临时存储节点
			ListNode item = node.getNextList();

			// 调整节点前后位置
			node.setNextList(preListNode);

			// 将自己保存起来, 后面的元素开始指向自己
			preListNode = node;
			
			// 设置再次循环条件
			node = item;

		}

	}

}

ListNodeTest.java

package com.li;

import org.junit.Test;

public class ListNodeTest {

	@Test
	public void test() {

		// 测试

		// 1. 创建数据
		ListNode listNode1 = new ListNode(1);
		ListNode listNode2 = new ListNode(2);
		ListNode listNode3 = new ListNode(3);
		// 2. 设置链表关系
		listNode1.setNextList(listNode2);
		listNode2.setNextList(listNode3);

		// 3. 循环显示
		System.out.println("----------转换前----------");
		ListNode listNode = listNode1;
		while (listNode != null) {
			System.out.println(listNode.getData());// 打印输出
			listNode = listNode.getNextList();
		}

		// 4. 反转链表
		ConvertList.convertListNode(listNode1);
		

		// 5. 循环显示
		System.out.println("----------转换后----------");
		listNode = listNode3;
		while (listNode != null) {
			System.out.println(listNode.getData());// 打印输出
			listNode = listNode.getNextList();
		}

	}

}

打印结果:


查看评论

c++笔试题汇总 ①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:

  • 2011年03月19日 16:29
  • 708KB
  • 下载

JAVA链表实现与链表的逆序

1.链表 2.链表逆序
  • jiaomingliang
  • jiaomingliang
  • 2014-11-01 10:10:28
  • 1614

链表常见操作java实现二:反转链表,从尾到头倒序遍历

1.反转链表反转链表在面试中非常常见。例如: 将原链表: 0->1->2->3 反转为新链表: 3->2->1->0 反转链表的一般思路是使用三个指针。其中,一个指针为当前节点,一个指针指向...
  • bitcarmanlee
  • bitcarmanlee
  • 2016-08-08 22:40:06
  • 7490

Java 单链表的反转 以及 双向链表的实现

Java 单链表的反转 双向链表的实现
  • fuckluy
  • fuckluy
  • 2016-03-27 09:34:36
  • 888

单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。

最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下: 还添加了一个删除结点的操作。 ...
  • microsoftwin32
  • microsoftwin32
  • 2012-05-11 13:09:41
  • 775

反转单向链表和反转双向链表

问题描述:反转单向链表和双向链表 要求:如果链表长度为N,时间复杂度要求为O(N),额外的空间复杂度要求为O(1)...
  • L_kanglin
  • L_kanglin
  • 2017-03-17 20:32:24
  • 1382

链表翻转(给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5)

链表翻转。 给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,提示:这个题...
  • qq_35409955
  • qq_35409955
  • 2017-07-25 15:21:11
  • 462

写正确函数需要注意的地方:两个非降序链表的并集,1>2>3和2>3>5合并为1>2>3>5。

int OutCombine(Node* p1, Node* p2) { while(p1!=NULL && p2!=NULL) { if(p1->value>p2->value) { ...
  • chjjunking
  • chjjunking
  • 2012-09-10 13:59:52
  • 1421

LeetCode(82)Remove Duplicates from Sorted List

题目Given a sorted linked list, delete all duplicates such that each element appear only once.For exam...
  • fly_yr
  • fly_yr
  • 2015-09-22 21:33:09
  • 395

【LintCode】 Reverse Linked List 翻转链表

翻转一个链表样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null挑战 在原地一次翻转完成思路: 1、建一个新的头指针,将旧链表从头向尾拆卸,拆下来的节点插入...
  • wutingyehe
  • wutingyehe
  • 2015-07-14 22:10:00
  • 629
    个人资料
    持之以恒
    等级:
    访问量: 3193
    积分: 223
    排名: 33万+
    文章存档