日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例

發布時間:2023/12/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單鏈表的逆序輸出分為兩種情況,一種是只逆序輸出,實際上不逆序;另一種是把鏈表逆序。本文就分別實例講述一下兩種方法。具體如下:

1.逆序輸出

實例代碼如下:

#include

#include

#include

using namespace std;

typedef struct node{

int data;

node * next;

}node;

//尾部添加

node * add(int n, node * head){

node * t = new node;

t->data = n;

t->next = NULL;

if (head == NULL){

head = t;

}

else if (head->next == NULL){

head->next = t;

}

else{

node * p = head->next;

while (p->next != NULL){

p = p->next;

}

p->next = t;

}

return head;

}

//順序輸出

void print(node * head){

node * p = head;

while (p != NULL){

cout << p->data << " ";

p = p->next;

}

cout << endl;

}

//遞歸

void reversePrint(node * p){

if (p != NULL){

reversePrint(p->next);

cout << p->data << " ";

}

}

//棧

void reversePrint2(node * head){

stack s;

while (head != NULL){

s.push(head->data);

head = head->next;

}

while (!s.empty()){

cout << s.top() << " ";

s.pop();

}

}

int main(){

node * head = NULL;

for (int i = 1; i <= 5; i++){

head = add(i, head);

}

print(head);

reversePrint(head);

reversePrint2(head);

system("pause");

return 0;

}

逆序輸出可以用三種方法: 遞歸,棧,逆序后輸出。最后一種接下來講到。

2.單鏈表逆序

實例代碼如下:

#include

#include

#include

using namespace std;

typedef struct node{

int data;

node * next;

}node;

node * add(int n, node * head){

node * t = new node;

t->data = n;

t->next = NULL;

if (head == NULL){

head = t;

}

else if (head->next == NULL){

head->next = t;

}

else{

node * p = head->next;

while (p->next != NULL){

p = p->next;

}

p->next = t;

}

return head;

}

//循環

node * reverse(node * head){

if (head == NULL || head->next == NULL){

return head;

}

node * p1 = head;

node * p2 = head->next;

node * p3 = NULL;

head->next = NULL;

while (p2 != NULL){

p3 = p2;

p2 = p2->next;

p3->next = p1;

p1 = p3;

}

head = p1;

return head;

}

void print(node * head){

node * p = head;

while (p != NULL){

cout << p->data << " ";

p = p->next;

}

cout << endl;

}

//遞歸

node * reverse2(node * p){

if (p == NULL || p->next == NULL){

return p;

}

node * newHead = reverse2(p->next);

p->next->next = p;

p->next = NULL;

return newHead;

}

int main(){

node * head = NULL;

for (int i = 1; i <= 5; i++){

head = add(i, head);

}

print(head);

head = reverse(head);

print(head);

head = reverse2(head);

print(head);

system("pause");

return 0;

}

這里鏈表逆序用了兩種方法:循環,遞歸。讀者最容易理解的方法就是在紙上自己畫一下。

希望本文所述實例對大家的數據結構與算法學習能有所幫助。

總結

以上是生活随笔為你收集整理的c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。