Java 实现单链表反序

//单链表反序
public class SingleLinkedListReverse {

	public static void main(String[] args) {
		Node head = new Node(0);
		Node temp = null;
		Node cur = null;

		for (int i = 1; i <= 10; i++) {
			temp = new Node(i);
			if (i == 1) {
				head.setNext(temp);
			} else {
				cur.setNext(temp);
			}
			cur = temp;
		}//10.next = null;

		Node h = head;
		while (h != null) {
			System.out.print(h.getData() + "\t");
			h = h.getNext();
		}
		System.out.println();

		//反转1
//		h = Node.reverse1(head);
//		while (h != null) {
//			System.out.print(h.getData() + "\t");
//			h = h.getNext();
//		}

		//反转2
		h = Node.reverse1(head);
		while (h != null) {
			System.out.print(h.getData() + "\t");
			h = h.getNext();
		}

	}
}

/*
 * 单链表的每个节点都含有指向下一个节点属性
 */
class Node {
	Object data;//数据对象
	Node next; //下一节点

	Node(Object d) {
		this.data = d;
	}
	Node(Object d, Node n) {
		this.data = d;
		this.next = n;
	}
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
	public Node getNext() {
		return next;
	}
	public void setNext(Node next) {
		this.next = next;
	}
	//方法1  head被重置
	static Node reverse1(Node head) {

		Node p = null; //反转后新的 头
		Node q = head;
		//轮换结果:012,123,234,.... 10 null null
		while (head.next != null) {
			p = head.next;		// 第1个 换成第2个  这时p表示原始序列头中的next
			head.next = p.next;  // 第2个 换成第3个
			p.next = q;			//已经跑到第1位置的原第2个的下一个 就要变成 原第1个
			q = p;				//新的第1个 要变成 当前第一个
		}
		return p;

	}
	//方法2 head没重置
	static Node reverse2(Node head) {
		//将中间节点的指针指向前一个节点之后仍然可以继续向后遍历链表
		Node p1 = head, p2 = head.next, p3; // 前 中 后
		//轮换结果 :012, 123, 234, 345, 456.... 9 10 null
		while (p2 != null) {
			p3 = p2.next;
			p2.next = p1; //指向后 变 指向前
			p1 = p2; 	 //2、3向前挪
			p2 = p3;
		}
		head.next = null;//head没变,当输出到0时,再请求0.next 为1
		return p1;
	}
}

Java 实现单链表反序

时间: 2024-10-20 16:33:43

Java 实现单链表反序的相关文章

单链表反序

typedef struct node *linklist; //revese linklist linklist reverselinklist1(linklist l) { linklist current, p; if(l == NULL) { return NULL; } current = l -> next; while(current -> next != NULL) { p = current -> next; current -> next = p -> n

java 实现单链表的逆序

</pre><pre name="code" class="java">package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } }

华为机试题-- 单链表逆序

[问题] 单链表逆序 [代码] #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ListNode { int value; struct ListNode *next; }ListNode; typedef struct ListNode *List; List reverseList(List head) //列表逆序 { ListNode *rear, *curr,

java实现单链表

前面已经介绍了java如何实现顺序链表:http://www.cnblogs.com/lixiaolun/p/4643664.html 接下来,我们开始学习java实现单链表. 单链表类 package linklist; public class LinkList { class Element { public Object value=null; private Element next=null; } private Element header = null;//头结点 /** * 初

单链表逆序或者逆序输出

分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序. ********************逆序输出*********************** 1 #include<iostream> 2 #include<stack> 3 #include<assert.h> 4 using namespace std; 5 6 7 typedef struct node{ 8 int data; 9 node * next; 10 }node; 11 12 //

JAVA 实现单链表

1 public class LinkNode { 2 public String data; 3 public LinkNode next; 4 5 LinkNode(){ 6 this.data = "a"; 7 this.next = null; 8 } 9 10 LinkNode(String string){ 11 this.data = string; 12 this.next = null; 13 } 14 } 1 public class LinkList { 2 3

链表 - 单链表逆序

单链表逆序是经典的链表操作算法,单链表逆序的算法思想是将链表箭头反指(假设next指针是一个箭头),即所谓的改链,改链过程如下. 逆序前: head-->......prev-->cur-->next-->......->NULL 逆序后: NULL<--......prev<--cur<--next<--......head 算法逻辑: 1.空链表或只有一个元素,返回原链表head. 2.定义3个指针prev.cur.next,初始化时,prev指向

Java实现单链表的快速排序和归并排序

本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space complexity. 题目要求我们在O(n log n)时间复杂度下完成对单链表的排序,我们知道平均时间复杂度为O(n log n)的排序方法有快速排序.归并排序和堆排序.而一般是用数组来实现二叉堆,当然可以用二叉树来实现,但是这么做太麻烦,还得花费额外的空间构建二叉树,于是不采用堆排序. 故本

数据结构复习--java实现单链表基本操作

单链表的基本操作包括建立单链表.查找运算(按序查找和按值查找).插入运算(前插和后插)和删除运算.下面给出具体的java实现程序: package com.zpp.test; //首先创建一个节点类 public class Node { private Node next; //指针域 private int data;//数据域 public Node( int data) { this. data = data; } } package com.zpp.test; public class