单链表实现及逆序
来源:互联网 发布:linux ps和netstat 编辑:程序博客网 时间:2024/06/06 09:21
方法一:
来自这里:http://www.cnblogs.com/jsczljh/p/3765720.html
定义节点
package test001;public class Node {private Integer data;//节点数据值private Node next;//节点下一个节点public Integer getData() {return data;}public void setData(Integer data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}@Overridepublic String toString() {return "data=" + data + ", " + next;}}
package test001;public class ReverseUtil {public static Node reverse(Node head){//表为空或只有一个元素直接返回if(head.getNext()==null || head.getNext().getNext()==null){return head;}Node p = head.getNext();Node q = head.getNext().getNext();Node t = null;while(q!=null){t = q.getNext();q.setNext(p);p=q;q=t;}head.getNext().setNext(null);head.setNext(p);return head;}}
测试:
package test001;public class Test {public static void main(String[] args) {Node head = new Node();head.setData(0);head.setNext(null);Node p;p=head;for (int i = 1; i <= 10; i++) {Node q = new Node();q.setData(i);q.setNext(null);p.setNext(q);p=q;}System.out.println(head);System.out.println("======");System.out.println(ReverseUtil.reverse(head));}}
方法二:
来自这里:http://www.nowamagic.net/librarys/veda/detail/2241
这个就是每次把头节点的下一个节点,放到最前面,这样头节点和它互换位置。依次类推
// 原链表,current = 68, pnext = 55,68指向18,55指向18,头结点指向55
-> 68 -> 55 -> 18 -> 45 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67
// 第一次交换后,原链表变成这样
-> 55 -> 68 -> 18 -> 45 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67
// 进行第二次交换,pnext = 18,68指向45,18变成头结点
-> 18 -> 55 -> 68 -> 45 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67
// 进行第三次交换,pnext = current->next = 45,68指向41,45变成头结点
-> 45 -> 18 -> 55 -> 68 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67
package test002;public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } } public static void main(String[] args) { SingleLinkedReverse slr = new SingleLinkedReverse(); Node head, tail; head = tail = slr.new Node(0); for(int i=1; i<10; i++){ Node p = slr.new Node(i); tail.next = p; tail = p; } tail = head; while(tail != null){ System.out.print(tail.data+" "); tail = tail.next; } System.out.println(" "); head = reverse(head); while(head != null){ System.out.print(head.data+" "); head = head.next; } } private static Node reverse(Node head) { Node p1,p2 = null; p1 = head; while(head.next != null){ p2 = head.next; head.next = p2.next; p2.next = p1; p1 = p2; } return p2; } }
阅读全文
0 0
- 单链表实现及逆序
- 单链表逆序生成及逆置的完整实现
- C++实现单链表逆序
- c++实现单链表逆序
- 单链表的逆序----简单实现
- 单链表实现字符串逆序输出
- 单链表逆序(c实现)
- java 实现单链表的逆序
- 数组实现栈及用栈实现字符串逆序
- C语言实现单链表逆序与逆序输出实例
- java实现归并排序及求逆序对
- 单向链表的基本操作及逆序实现
- 【C语言】递归实现栈的逆序及排序
- 归并排序的实现及利用其求逆序对数
- 利用栈来实现单链表的逆序
- 单链表逆序的C++实现
- 6、JAVA实现单链表的逆序
- 用一个临时变量实现单链表逆序
- 出现No persister for错误后有如下三种解决办法
- Spring Cloud 之 Spring Cloud Zuul(七)
- java中那些关于String的面试题
- mac vscode 配置golang
- utf-8与gbk互转
- 单链表实现及逆序
- spring定时器配置
- 小程序+TP5使用JWT做登陆验证
- Java异常(二)
- 关于用户注册界面测试用例总结(转)
- Linux后台运行命令
- 阻止putty变成inactive
- 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)
- Android 获取前台应用的方法总结