面试题三:使用 java 实现单向链表的倒置
来源:互联网 发布:mysql redis 实时同步 编辑:程序博客网 时间:2024/05/16 06:43
我理解的链表倒置的意思应该是比如 a->b 变成 b->a ,
核心算法不难,
a->b->c->d->f
a->null
b->c->d->f
b->a->null c->d->f
如同上述,先把当前结点指向null,再取出它原本的下一个结点指向它
核心算法不难,
a->b->c->d->f
a->null
b->c->d->f
b->a->null c->d->f
如同上述,先把当前结点指向null,再取出它原本的下一个结点指向它
通过while循环,执行到最后,f->d
package edu.fjnu.service;import edu.fjnu.domain.LinkNode;public class Init {public LinkNode InitNode(){//初始化,a->b->c->d->e->f->nullLinkNode head = new LinkNode("a");LinkNode nodeb = new LinkNode("b");LinkNode nodec = new LinkNode("c");LinkNode noded = new LinkNode("d");LinkNode nodee = new LinkNode("e");LinkNode nodef = new LinkNode("f");head.setNext(nodeb);nodeb.setNext(nodec);nodec.setNext(noded);noded.setNext(nodee);nodee.setNext(nodef);nodef.setNext(null);return head;}}
package edu.fjnu.service;import edu.fjnu.domain.LinkNode;public class NodeMethod {/** * 打印函数,打印当前结点的data值 * @param node 当前结点 * @author Harry */public void printValue(LinkNode node){while(node != null){System.out.print(node.getData()+" ");node = node.getNext();}//if(node == null){//System.out.println("null");//}}/** * 链表倒置函数 每一步所执行的操作,把当前结点取出来,指向原本的头结点 * @param head 头结点 * @return 倒置后的头结点 * @author Harry */public LinkNode reverse(LinkNode head){if(head != null) {LinkNode h = head ;LinkNode x = head.getNext();LinkNode y = null;h.setNext(null);while(x.getNext() != null){y = x.getNext();x.setNext(h); //把当前结点的头结点,变成当前结点的nexth = x;x = y;}x.setNext(h); //原本的最后一个结点,未进入到循环,手动设置return x;}return null;//如果沒有循环,抛出空}}
package edu.fjnu.domain;/** * * @author Harry * */public class LinkNode {private Object data; //结点值private LinkNode next; //next结点public LinkNode(Object data){this.data = data;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public LinkNode getNext() {return next;}public void setNext(LinkNode next) {this.next = next;}@Overridepublic String toString() {return "LinkNode [data=" + data + ", next=" + next + "]";}}
package edu.fjnu.client;import edu.fjnu.domain.LinkNode;import edu.fjnu.service.Init;import edu.fjnu.service.NodeMethod;public class Main {/** * @param args */public static void main(String[] args) {LinkNode head = new Init().InitNode();NodeMethod use = new NodeMethod ();System.out.print("原先的结点是: ");use.printValue(head);System.out.println();System.out.print("旋转后的结点是: ");LinkNode nl = null;use.printValue(nl);use.printValue(use.reverse(nl));use.printValue(use.reverse(head));}}
最后程序执行的结果:
原先的结点是: a b c d e f
旋转后的结点是: f e d c b a
1 0
- 面试题三:使用 java 实现单向链表的倒置
- 单向链表的倒置
- 单向链表的一个面试题
- 单向链表反转(倒置)问题
- java 单向链表的实现
- java单向链表的实现
- 单向链表的java简单实现
- 单向链表的java实现
- java 单向链表的实现
- Java 倒置(翻转)链表的两种实现
- 大话数据结构(三)——单向循环链表的java实现
- java面试题(三)
- java面试题三
- java面试题三
- Java 面试题 三
- Java面试题三
- java面试题三
- Java面试题三
- 获取当前网络状态/手机状态
- (Eclipse打包问题)Export aborted because fatal lint errors we
- 冒泡排序
- java设计模式 单例
- 分类-3-生成学习-1-问题引入
- 面试题三:使用 java 实现单向链表的倒置
- C语言 fork()笔试题
- 通过get或post请求URL获取返回数据
- 【POJ 2283】 【HDU 1664】 Different Digits
- [poj 1703] Find them, Catch them 并查集应用
- IOS 网络浅析-(五 xml解析)
- C#中DllImport用法
- 从一道面试题谈linux下fork的运行机制
- Probe监控Tomcat