您现在的位置是:主页 > news > 南通网站制作建设/北京竞价托管代运营

南通网站制作建设/北京竞价托管代运营

admin2025/5/24 9:33:57news

简介南通网站制作建设,北京竞价托管代运营,怎么做网站海报轮播图,昆明著名网站建设题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 链表结点定义如下: Struct ListNode{ int m_nKey; ListNode* m_pNext; }; 我们可以用栈来实现“后进先出”的顺序。每经过一个结点的时候,把该结点防到一…

南通网站制作建设,北京竞价托管代运营,怎么做网站海报轮播图,昆明著名网站建设题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 链表结点定义如下: Struct ListNode{ int m_nKey; ListNode* m_pNext; }; 我们可以用栈来实现“后进先出”的顺序。每经过一个结点的时候,把该结点防到一…

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。

链表结点定义如下:

Struct ListNode{

   int   m_nKey;

   ListNode*   m_pNext;

};

 

 

 

 

 

 

  

我们可以用栈来实现“后进先出”的顺序。每经过一个结点的时候,把该结点防到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。

void PrintListReversingly_Iteratively(ListNode* pHead){std::stack<ListNode*> node;ListNode* pNode = pHead;while(pNode != null){nodes.push(pNode);pNode = pNode->m_pNext;
}while(!nodes.empty()){pNode = nodes.top();printf("%d\t",pNode->m_nValue);nodes.pop();}
}

  我们也可以用递归来实现反过来输出链表,我们每访问到一个结点的时候,先递归输出它后面的结点,再输出该结点自身,这样链表的输出结果就反过来了。

void PrintListReversingly_Recursively(ListNode* pHead){if(pHead != null){if(pHead->m_pNext != null){PrintListReversingly_Recursively(pHead->m_pNext);}printf("%d\t",pHead->m_nValue);} 
}

java精简版:

Node类:

package com.yyq;/*** Created by Administrator on 2015/9/8.*/
public class Node {String value;Node next;public Node(String  value){this.value = value;}public String  getValue() {return value;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}public void setValue(String value) {this.value = value;}
};

处理类:

package com.yyq;
import java.util.Stack;/*** Created by Administrator on 2015/9/8.*/
public class PrintLinkReversingly {public static void main(String[] args) {Node a = new Node("A");Node b = new Node("B");Node c = new Node("C");Node d = new Node("D");Node e = new Node("E");Node f = new Node("F");Node g = new Node("G");a.next = b;b.next = c;c.next = d;d.next = e;e.next = f;f.next = g;printTailToStartRec(a);printTailToStartStack(a);}public static void printTailToStartRec(Node start) {if (start == null ) return;if (start.next!= null) {printTailToStartRec(start.next);}System.out.println(start.value);}private static void printTailToStartStack(Node node) {if (node == null) {System.out.println("list is null");return;}Stack<Node> stack = new Stack<Node>();while (node != null) {stack.push(node);node = node.next;}while (!stack.isEmpty()) {System.out.println(stack.pop().value);}}
}

输出结果:

F

E

D

C

B

A

G

F

E

D

C

B

A

Process finished with exit code 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

java版本:

链表接口定义:

package com.yyq;/*** Created by Administrator on 2015/9/4.*/
public interface Link {//向链表增加数据void add(Object data);//可以增加一组对象void add(Object data[]);//在链表中删除数据void delete(Object data);//判断数据是否存在boolean exists(Object data);//取得全部的保存对象
    Object[] getAll();//根据保存的位置取出指定对象Object get(int index);//求出链表的长度int length();
}

 

链表类定义:

package com.yyq;/*** Created by Administrator on 2015/9/4.*/
public class LinkImpl implements Link {class Node {private Object data;private Node next;public Node(Object data) {this.data = data;}public void addNode(Node newNode) {if (this.next == null) {this.next = newNode;} else {this.next.addNode(newNode);}}public void deleteNode(Node previous, Object data) {if (this.data.equals(data)) {previous.next = this.next;} else {if (this.next != null) {this.next.deleteNode(this, data);}}}public void getAll() {retdata[foot++] = this.data; //取出当前节点中的数据if (this.next != null) {this.next.getAll();}}};private int foot = 0;private Node root; //根节点private int len;private Object retdata[];//接收全部的返回值数据//向链表增加数据
    @Overridepublic void add(Object data) {if (data != null) {len++; //保存个数Node newNode = new Node(data);if (this.root == null) {this.root = newNode;} else {this.root.addNode(newNode);}}}//可以增加一组对象
    @Overridepublic void add(Object data[]) {for(int x = 0; x < data.length; x++){this.add(data[x]);}}//在链表中删除数据
    @Overridepublic void delete(Object data) {if(this.exists(data)){//如果存在,则执行删除if(this.root.equals(data)){this.root = this.root.next;}else {this.root.next.deleteNode(this.root,data);}}}//判断数据是否存在
    @Overridepublic boolean exists(Object data) {if(data == null){return false;}if(this.root == null){return false;}Object d[] = this.getAll();//取得全部的数据boolean flag = false;for(int x = 0; x < d.length; x++){if(data.equals(d[x])){flag = true;break;}}return flag;}//取得全部的保存对象
    @Overridepublic Object[] getAll() {this.foot = 0;if(this.len != 0){this.retdata = new Object[this.len];//根据大小开辟数组this.root.getAll();return this.retdata;}else{return null;}}//根据保存的位置取出指定对象
    @Overridepublic Object get(int index) {Object d[] = this.getAll();if(index < d.length){return d[index];}else{return null;}}//求出链表的长度
    @Overridepublic int length() {return this.len;}
}

链表使用举例:

package com.yyq;/*** Created by Administrator on 2015/9/4.*/
public class PrintListReversingly {public static void main(String[] args) {Link link = new LinkImpl();link.add("A");link.add("B");link.add("C");link.add(new String[]{"X","Y"});Object obj[] = link.getAll();for(Object o : obj){System.out.println(o);}System.out.println(obj.length);System.out.println(link.exists(null));System.out.println(link.get(3));link.delete("X");obj = link.getAll();for(Object o : obj){System.out.println(o);}System.out.println(obj.length);  //注意这里还是原来obj开辟时的长度
    }
}

从尾到头打印链表:

package com.yyq;import java.util.Stack;/*** Created by Administrator on 2015/9/4.*/
public class PrintListReversingly {public static void main(String[] args) {Link link = new LinkImpl();link.add("A");link.add("B");link.add("C");link.add(new String[]{"D","E","F","G"});Object obj[] = link.getAll();for(Object o : obj){System.out.println(o);}int len = obj.length;System.out.println("============");for(int i = len-1; i >= 0; i--){System.out.println(obj[i]);}}
}

 

转载于:https://www.cnblogs.com/yangyquin/p/4910598.html