C 演算法之 反轉單鏈表

2021-06-27 14:33:02 字數 1539 閱讀 2930

題目:定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點,鍊錶節點定義為:

struct listnode

int    m_nvalue;

listnode* m_pnext;

演算法思路:

鍊錶  1-->2-->3-->4-->5

建立乙個 pprev節點,而且為空節點;  pprev = null;再建立乙個節點pnode = phead; 再建立第三個節點pnext = pnode->m_pnext; 

pnext的作用:用來儲存pnode後面乙個的節點,防止鍊錶在中間斷開,然後pprev與pnode往下遍歷:

看**:

listnode* reverselist(listnode* head)

return pprev;

// return preversedhead;

}

完整**:

// reverselist.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

struct listnode

listnode(int i):m_nvalue(i),m_pnext(null) };

void addtotail(listnode* phead, int value)

else

pnode->m_pnext = pnew; }}

void print(listnode* head)

}listnode* reverselist(listnode* head)

return pprev;

// return preversedhead;

}int _tmain(int argc, _tchar* argv)

{ /*

listnode* head = new listnode(1);

listnode* node1 = new listnode(2);

listnode* node2 = new listnode(3);

listnode* node3 = new listnode(4);

listnode* node4 = new listnode(5);

head->m_pnext = node1;

node1->m_pnext = node2;

node2->m_pnext = node3;

node3->m_pnext = node4;

node4->m_pnext = null;

*/ listnode* pnode1 = new listnode(1);

//print(pnode1);

addtotail(pnode1,2);

addtotail(pnode1,3);

addtotail(pnode1,4);

addtotail(pnode1,5);

cout<<"反轉以前:"<

**可以執行測試通過!

C 演算法 反轉單鏈表

反轉單鏈表,我使用了兩種方法,不過他們都很相近。宣告 class clist 宣告反轉單鏈表函式 void reversesll clist clist prenode nullptr void csinglelinkedlist reversesll clist node,clist prenod...

單鏈表反轉演算法

struct listnode 想到兩種方法 想法是構建乙個新的單鏈表,然後遍歷原來的單鏈表,每遍乙個就把它插入到最新的單鏈表的開頭,下面是 struct listnode reverselist struct listnode list temp list last null while temp...

C 單鏈表反轉

複習下c 單鏈表反轉 思路 在順序讀取鍊錶的過程中,對每個節點逐個進行反轉 首先建立單鏈表 struct linknode linknode createlink return head 對鍊錶進行反轉 linknode reverse linknode head q next p head nex...