1、代码案例:

package com.zhangwl.数据结构.单链表;

/**
* @ClassName SingleLinkedList
* @Description
* @Author zhangwl
* @Date 2019/10/20 20:59
* @Version 1.0
**/
@SuppressWarnings("all")
public class SingleLinkedList {

private HeroNode first = new HeroNode(0, "", "");

/*添加节点*/
public void add(HeroNode heroNode) {
HeroNode tempNode = this.first;
while (true) {
if (null == tempNode.nextNode) {
break;
}
tempNode = tempNode.nextNode;
}
tempNode.nextNode = heroNode;
}

public void update(HeroNode heroNode) {
if (first.nextNode == null) {
System.out.println("链表为空,尚无数据可改...");
}
boolean flag = false;
HeroNode tempNode = first;
while (true) {
if (tempNode.nextNode == null) {
break;//尚无找到可进行修改的节点
}
if (tempNode.no == heroNode.no) {
flag = true;
break;
}
tempNode = tempNode.nextNode;
}

if (flag) {
tempNode.name = heroNode.name;
tempNode.nickName = heroNode.nickName;
return;
}
System.out.println("尚无找到可进行修改的节点");
}

public void addNode(HeroNode heroNode) {
HeroNode tempNode = this.first;
boolean flag = false;//表示节点是否存在
while (true) {
if (tempNode.nextNode == null) {
break;
}
if (tempNode.nextNode.no > heroNode.no) {
break;
} else if (tempNode.nextNode.no == heroNode.no) {
flag = true;
break;
}
tempNode = tempNode.nextNode;
}
/*准备添加数据*/
if (flag) {
System.out.println("节点存在,无需重复添加");
System.out.println(tempNode.nextNode);
return;
}
heroNode.nextNode = tempNode.nextNode;
tempNode.nextNode = heroNode;
}

/*显示所有节点*/
public void list() {
HeroNode tempNode = this.first;
while (true) {
if (tempNode == null) {
break;
}
System.out.println(tempNode);
System.out.println();
tempNode = tempNode.nextNode;
}
}

public void delete(int no) {
HeroNode tempNode = first;
boolean flag = false;
while (true) {
if (tempNode.nextNode == null) {
break;
}

if (tempNode.nextNode.no == no) {
flag = true;
break;
}
tempNode = tempNode.nextNode;
}
if (flag) {
tempNode.nextNode = tempNode.nextNode.nextNode;
return;
}
System.out.println("目标节点不存在...");
}

/**
* 反转单链表
*/
public void reverseList() {
//如果一个节点headNode.next为null 或 headNode.next.next 为null 无需翻转
if (first.nextNode == null || first.nextNode.nextNode == null) {
return;
}

//临时节点,记录
HeroNode tempNode = first.nextNode;
//临时存放下一个节点的节点
HeroNode nextNode = null;
//创建一个反转的头节点
HeroNode reverseNode = new HeroNode(0, "", "");
//循环判断节点是否为空
while (tempNode.nextNode != null) {
nextNode = tempNode.nextNode;
tempNode.nextNode = reverseNode.nextNode;
reverseNode.nextNode = tempNode;
tempNode = nextNode;
}

tempNode.nextNode = reverseNode.nextNode;
reverseNode.nextNode = tempNode;
first.nextNode = reverseNode.nextNode;
}
}

package com.zhangwl.数据结构.单链表;

import org.junit.Test;

/**
* @ClassName MainTest
* @Description
* @Author zhangwl
* @Date 2019/11/17 21:23
* @Version 1.0
**/
public class MainTest {

/**
* 测试队列反转
*/
@Test
public void test_01() {
SingleLinkedList linkedList = new SingleLinkedList();
linkedList.addNode(new HeroNode(1, "1", "1"));
linkedList.addNode(new HeroNode(2, "2", "2"));
linkedList.addNode(new HeroNode(3, "3", "3"));
linkedList.addNode(new HeroNode(5, "5", "5"));
linkedList.addNode(new HeroNode(4, "4", "4"));
//展示数列
System.out.println("***********************************原数列***********************************");
linkedList.list();
System.out.println();
//反转数列
linkedList.reverseList();
System.out.println("***********************************反转后的数列***********************************");
linkedList.list();
System.out.println();
}
}

2、运行结果:

***********************************原数列***********************************
HeroNode{no=0, name='', nickName=''}

HeroNode{no=1, name='1', nickName='1'}

HeroNode{no=2, name='2', nickName='2'}

HeroNode{no=3, name='3', nickName='3'}

HeroNode{no=4, name='4', nickName='4'}

HeroNode{no=5, name='5', nickName='5'}


***********************************反转后的数列***********************************
HeroNode{no=0, name='', nickName=''}

HeroNode{no=5, name='5', nickName='5'}

HeroNode{no=4, name='4', nickName='4'}

HeroNode{no=3, name='3', nickName='3'}

HeroNode{no=2, name='2', nickName='2'}

HeroNode{no=1, name='1', nickName='1'}

posted on 2019-11-17 22:30  it_zhangwl  阅读(132)  评论(0编辑  收藏  举报