如何实现一个高效的单向链表逆序输出?

摘要: 参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。供参考。typedef struct node}node;void reverse(node* head) node* pleft = NULL; node* pcurrent = head; node* pright = head->next; while(pright) while(pcurrent !...


参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。供参考。


typedef struct node{

    int           data;

    struct node*  next;

    node(int d):data(d), next(NULL){}

}node;


void reverse(node* head)

{

    if(head == NULL){

        return;

    }


    node* pleft = NULL;

    node* pcurrent = head;

    node* pright = head->next;


    while(pright){

        pcurrent->next = pleft;

        node *ptemp = pright->next;

        pright->next = pcurrent;

        pleft = pcurrent;

        pcurrent = pright;

        pright = ptemp;

    }


    while(pcurrent != NULL){

        cout<< pcurrent->data << "\t";

        pcurrent = pcurrent->next;

    }

}


class Solution<T> {


    public void reverse(ListNode<T> head) {

       if (head == null || head.next == null) {

       return ;

       }

       ListNode<T> currentNode = head;

       Stack<ListNode<T>> stack = new Stack<>();

       while (currentNode != null) {

       stack.push(currentNode);

       ListNode<T> tempNode = currentNode.next;

       currentNode.next = null; // 断开连接

       currentNode = tempNode;

       }

       

       head = stack.pop();

       currentNode = head;

       

       while (!stack.isEmpty()) {

       currentNode.next = stack.pop();

       currentNode = currentNode.next;

       }

    }

}


class ListNode<T>{

T val;

public ListNode(T val) {

this.val = val;

}

ListNode<T> next;

}


网友留言评论

0条评论