编程之美--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->

                
            
        
浙公网安备 33010602011771号