部分文章内容为公开资料查询整理,原文出处可能未标注,如有侵权,请联系我,谢谢。邮箱地址:gnivor@163.com ►►►需要气球么?请点击我吧!

编程之美--3.4从无头单链表中删除节点

(1)假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点)。请将该节点从单链表中删除。
(2)扩展题目:给定一个链表头指针,将单链表逆置。

 

(1)解

方法1:先遍历一边,找到要删除的节点的前一个节点,然后删除这个节点的下一个节点。

方法2:将要删除的节点后面的那个节点的数据复制到该节点,然后删除后面的那个节点。

 

(2)解

采用尾插法

package com304.cong.wutou.danlianbiao.shanchu.jiedian;

public class MyReverseNode {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Node n0 = new Node(0,null);
        Node n1 = new Node(1,n0);
        Node n2 = new Node(2,n1);
        Node n3 = new Node(3,n2);
        Node n4 = new Node(4,n3);
        Node n5 = new Node(5,n4);
        Node n6 = new Node(6,n5);
        
        Node p = n6;
        System.out.println("原始的链表,n6为头部");
        while(p!=null){
            System.out.print(p.data+"->");
            p=p.next;
        }
        
        p = ReserveNode(n6);
        System.out.println("\n翻转后的链表,n0为头部");
        //p=n0;
        while(p!=null){
            System.out.print(p.data+"->");
            p=p.next;
        }
        
        

    }

    public static Node ReserveNode(Node first){
        Node P = first; //遍历指针
        Node Q = first; //翻转操作指针
        Node ptemp = null; //指向翻转的链表
        while(P!=null){    //翻转整个链表
            P=P.next;
            Q.next=ptemp;
            ptemp = Q;
            Q=P;
        }
        return ptemp; //返回表头
    }
}

class Node{
    public int data;
    public Node next;
    public Node(int data,Node next){
        this.data=data;
        this.next=next;
    }
}

运行结果:

原始的链表,n6为头部
6->5->4->3->2->1->0->
翻转后的链表,n0为头部
0->1->2->3->4->5->6->

 

posted @ 2015-06-28 15:54  流了个火  阅读(116)  评论(0)    收藏  举报
►►►需要气球么?请点击我吧!►►►
View My Stats