代码:

package com.wangzhu.linkedlist;

public class LinkedListDemo {

    /**
* @param args
*/
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
Node head = null;
Node reverseHead = null; // 链表长度为0
head = new Node();
for (int i = 0; i < 0; i++) {
linkedList.add(head, new Node(i));
} System.out.print("未操作:");
linkedList.print(head); reverseHead = linkedList.reverse(head); System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println(); // 链表长度为1
head = new Node();
for (int i = 0; i < 1; i++) {
linkedList.add(head, new Node(i));
} System.out.print("未操作:");
linkedList.print(head); reverseHead = linkedList.reverse(head); System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println(); // 链表长度为2
head = new Node();
for (int i = 0; i < 2; i++) {
linkedList.add(head, new Node(i));
} System.out.print("未操作:");
linkedList.print(head); reverseHead = linkedList.reverse(head); System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println(); // 链表长度为3
head = new Node();
for (int i = 0; i < 3; i++) {
linkedList.add(head, new Node(i));
} System.out.print("未操作:");
linkedList.print(head); reverseHead = linkedList.reverse(head); System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println(); // 链表长度为4
head = new Node();
for (int i = 0; i < 4; i++) {
linkedList.add(head, new Node(i));
} System.out.print("未操作:");
linkedList.print(head); reverseHead = linkedList.reverse(head); System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println(); // 链表长度为5
head = new Node();
for (int i = 0; i < 5; i++) {
linkedList.add(head, new Node(i));
} System.out.print("未操作:");
linkedList.print(head); reverseHead = linkedList.reverse(head); System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println(); // 未操作:反转后:
// 未操作:0
// 反转后:0
//
// 未操作:0 1
// 反转后:1 0
//
// 未操作:0 1 2
// 反转后:2 1 0
//
// 未操作:0 1 2 3
// 反转后:3 2 1 0
//
// 未操作:0 1 2 3 4
// 反转后:4 3 2 1 0 } } class Node {
int value;
Node next; public Node() {
this.value = -1;
this.next = null;
} public Node(int value) {
this.value = value;
this.next = null;
} public Node(int value, Node next) {
this.value = value;
this.next = next;
}
} class LinkedList {
/**
* 后插法
*
* @param head
* @param node
*/
public void add(Node head, Node node) { Node tempNode = head;
if (tempNode == null) {
return;
}
while (tempNode.next != null) {
tempNode = tempNode.next;
}
tempNode.next = node;
} public void print(Node head) {
Node node = head;
if (node == null || node.next == null) {
return;
} node = node.next;
while (node != null) {
System.out.print(node.value + " ");
node = node.next;
}
System.out.println();
} /**
* 链表反转
*
* @param head
* @return
*/
public Node reverse(Node head) {
// 当链表为空,或链表没有元素
if (head == null || head.next == null) {
return head;
} // 反转头节点
Node reverseHead = new Node(); Node firstNode = head.next;// 链表中节点的前一个节点
Node node = firstNode.next; // 链表中的节点
Node nextNode = null;
if (node != null) {
nextNode = node.next;// 链表中的节点的后一个节点
}
firstNode.next = null;
while (nextNode != null) {
node.next = firstNode;// 将当前节点的后一个一个改为其前一个节点(相对反转之前)
firstNode = node; // 将当前节点置为下一节点的前节点
node = nextNode;// 获取下一个节点
nextNode = nextNode.next;// 获取下一个节点的后一个节点
}
if (node != null) {
// 当节点个数大于1时
node.next = firstNode;
reverseHead.next = node;
} else {
// 当只有一个节点时
reverseHead.next = firstNode;
} return reverseHead;
}
}

最新文章

  1. django ftp 研究
  2. (Collection)347. Top K Frequent Elements
  3. kali 2.0源更新
  4. 一些时间的概念与区分(UTC、GMT、LT、TAI等)
  5. [rxjs] Throttled Buffering in RxJS (debounce)
  6. sql server 修改表自增列的值
  7. 《windows程序设计》学习_3.2:左键的使用
  8. NLP 苏图南 打破自我设限 突破自我—在线播放—优酷网,视频高清在线观看
  9. 微信账号 echo_server 的实现
  10. 深入学习 DUBBO
  11. Spring Boot-------JPA——EntityManager构建通用DAO
  12. java的系统时间,怎么计算从现在到凌晨还剩下多少时间?
  13. sparkStreaming运行yarn,提交任务报错
  14. Tomcat 部署多个项目出现错误
  15. 带下拉列表的TextBox
  16. centos下同时启动多个tomcat
  17. 如何在 Xcode 中修改应用的名字
  18. 浅析ARM公司在物联网领域的战略布局(转)
  19. solaris 下查看某程序所开端口
  20. map模块使用方法

热门文章

  1. 设计模式------PROTOTYPE(原型),TEMPLATE(模板)
  2. ubuntu系统安装jdk
  3. python输出1到100之和的几种方法
  4. IOS开发之NSPredicate谓词的用法
  5. 04_线程的创建和启动_使用Callable和Future的方式
  6. CAF(C++ actor framework)使用随笔(send sync_send)(二)
  7. linux RedHat6.4下nginx安装
  8. iPad知识点记录
  9. 简单的NHibernate学习笔记
  10. rm排除指定文件或指定文件夹下文件