从尾到头输出单链表

    xiaoxiao2021-03-26  4

    #include <stdio.h> #include <stack> #include <string> #include <iostream> using namespace std; #include <stack> typedef struct Link{ int value; struct Link * LinkNext ; }Link,* LinkList; void initList(LinkList * head ){ if (head != NULL) { for (int i=0; i<10; i++) { LinkList p = (LinkList)malloc(sizeof(Link)); p->value = i; p->LinkNext = (*head)->LinkNext; (*head)->LinkNext = p; } } } LinkList reverse(LinkList head){ LinkList last = NULL ; LinkList start = head ; while (start != NULL) { LinkList temp = start->LinkNext; start->LinkNext = last ; last = start ; start = temp ; } return last; } LinkList reverse_DG(LinkList start , LinkList last = NULL){ if(start == NULL) return last; LinkList temp = start->LinkNext; start->LinkNext = last; return reverse_DG(temp , start); } void printList(LinkList start){ if (start != NULL) { while (start != NULL) { cout<<start->value<<" "; start = start->LinkNext; } } } //从尾到头打印链表方法1 递归 void Print_method1(LinkList head){ if (head == NULL) { return ; } Print_method1(head->LinkNext); cout<<head->value<<" "; } //从尾到头打印链表2 利用栈 void Print_methid2(LinkList head){ if(head != NULL || head->LinkNext != NULL){ stack<int> list ; while( head !=NULL ){ list.push(head->value); head = head->LinkNext; } while(!list.empty()){ cout<<list.top()<<" "; list.pop(); } } } int main(int argc , const char * argv[]) { LinkList head = (LinkList)malloc(sizeof(Link)); head->LinkNext = NULL; initList(&head); cout<<"原始的数值:"<<endl; printList(head->LinkNext); LinkList q = NULL; q = reverse_DG(head->LinkNext); // q = reverse(head->LinkNext); cout<<endl<<"反转后的的数值:"<<endl; printList(q); cout<<endl<<"从尾到头打印链表"<<endl; //Print_method1(q); Print_methid2(q); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-600279.html

    最新回复(0)