前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java用内部类构造链表实现相关方法

java用内部类构造链表实现相关方法

作者头像
张俊怡
发布2018-04-24 14:08:58
5230
发布2018-04-24 14:08:58
举报
文章被收录于专栏:深度学习计算机视觉

代码

代码语言:javascript
复制
import com.sun.corba.se.impl.orbutil.graph.Node;

/**
 * Created by junyi.pc on 2017/1/25.
 */

public class Main {

    Node head=null;
    Node tail=null;
    class Node { //内部类
        int data;
        Node next;

        public Node(int data) {
            this.data = data;
        }
    }
        public void addNode(int data){//增加节点
            Node node=new Node(data);
            if(head==null){
                head=node;
                tail=node;
            }
            else{
                Node temp=head;
                while(temp.next!=null){
                    temp=temp.next;
                }
                temp.next=node;
            }

        }
        public void deleteNode(int data){//删除节点
            Node tempNode=head;
            if(head==null){

            }
            if(tempNode.data==data){

                head=tempNode.next;//要删了第一个节点,就要把头结点后移
                if(tempNode.next==null){//这里特别考虑,如果是只有一个节点,要把尾结点变null
                    tail=null;
                }

                delete(tempNode);//最后删了这个点
            }
            while(tempNode.next!=null&&tempNode.next.data!=data)//遍历链表找到第一个值与x相等的节点,temp表示这个节点的上一个节点
            {
                tempNode=tempNode.next;
            }
            if(tempNode.next==null) return;//如果没有找到则返回
            if(tempNode==tail)//如果找到的时候尾节点
            {
                tail=tempNode;//把尾节点指向他的上一个节点
                delete(tempNode.next);//删除尾节点
                tempNode.next=null;
            }
            else//如果不是尾节点,如图4
            {
               Node node=tempNode.next;//用临时节点node指向要删除的节点
                tempNode.next=tempNode.next;//要删除的节点的上一个节点指向要删除节点的下一个节点
                delete(node);//删除节点
                node=null;
            }
        }
        public void traversal() { //遍历链表
            Node tempNode = head;
            while ( tempNode != null) {
                System.out.println( tempNode.data);
                tempNode =  tempNode.next;
            }
        }
        public void insert(int data,Node lastNode){
            if(lastNode==null){
              //一个节点都没有
            }
            else{
                Node node=new Node(data);//新节点来了怎么得也得分配空间吧
                node.next=lastNode.next;
                lastNode.next=node;
                if(node.next==null){//如果恰好这小子是尾节点
                     tail=node;//设置为尾节点
                }

            }


        }

        public void delete(Node node){
            //
        }
        public Node ReverseIteratively() {//链表反转
            Node pReversedHead = head;
            Node pNode = head;
            Node pPrev = null;
            while (pNode != null) {
                Node pNext = pNode.next;
                if (pNext == null) {
                    pReversedHead = pNode;
                }
                pNode.next = pPrev;
                pPrev = pNode;
                pNode = pNext;
            }
            this.head = pReversedHead;
            return this.head;
        }
         //删除重复节点
        public void deleteDuplecate(Node head) {
            Node p = head;
            while (p != null) {
                Node q = p;
                while (q.next != null) {
                    if (p.data == q.next.data) {
                        q.next = q.next.next;
                    } else
                        q = q.next;
                }
                p = p.next;
            }

        }
        public int length() {//返回链表长度
            int length = 0;
            Node tempNode = head;
            while (tempNode != null) {
                length++;
                tempNode = tempNode.next;
            }
            return length;
        }

        public Node orderList() {
            Node nextNode = null;
            int tmp = 0;
            Node curNode = head;//开始那个点
            //类似于冒泡排序
            while (curNode.next != null) {
                nextNode = curNode.next;
                while (nextNode != null) {
                    if (curNode.data > nextNode.data) {
                        tmp = curNode.data;  //交换
                        curNode.data = nextNode.data;
                        nextNode.data = tmp;
                    }
                    nextNode = nextNode.next;//相当于j++
                }
                curNode = curNode.next;//相当于i++
            }
            return head;
        }

    public static void main(String[] args){

        Main list = new  Main();
        list.addNode(1);
        list.addNode(2);
        list.addNode(3);
        System.out.println("linkLength:" + list.length());
        list.traversal();
        list.addNode(4);
        list.traversal();
    }
}
代码语言:javascript
复制
C:\java\jdk1.8.0_25\bin\java -Didea.launcher.port=7535 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\java\jdk1.8.0_25\jre\lib\charsets.jar;C:\java\jdk1.8.0_25\jre\lib\deploy.jar;C:\java\jdk1.8.0_25\jre\lib\ext\access-bridge-64.jar;C:\java\jdk1.8.0_25\jre\lib\ext\cldrdata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\dnsns.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jaccess.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jfxrt.jar;C:\java\jdk1.8.0_25\jre\lib\ext\localedata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\nashorn.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunec.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunjce_provider.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunmscapi.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunpkcs11.jar;C:\java\jdk1.8.0_25\jre\lib\ext\zipfs.jar;C:\java\jdk1.8.0_25\jre\lib\javaws.jar;C:\java\jdk1.8.0_25\jre\lib\jce.jar;C:\java\jdk1.8.0_25\jre\lib\jfr.jar;C:\java\jdk1.8.0_25\jre\lib\jfxswt.jar;C:\java\jdk1.8.0_25\jre\lib\jsse.jar;C:\java\jdk1.8.0_25\jre\lib\management-agent.jar;C:\java\jdk1.8.0_25\jre\lib\plugin.jar;C:\java\jdk1.8.0_25\jre\lib\resources.jar;C:\java\jdk1.8.0_25\jre\lib\rt.jar;C:\Users\junyi.pc\Desktop\client\out\production\client;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain Main
linkLength:3
1
2
3
1
2
3
4

Process finished with exit code 0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.02.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档