單鏈表翻轉

2021-07-31 05:27:25 字數 2084 閱讀 5541

1,原理

使用p和q兩個指標配合工作,使得兩個節點間的指向反向,同時用r記錄剩下的鍊錶。

p = head;

q = head->next;

head->next = null;

現在進入迴圈體,這是第一次迴圈。

r = q->next;

q->next = p;

p = q;

q =r;

第二次迴圈。

r = q->next

q->next = p;    

p = q;

q = r

第三次迴圈。。。。。

2,**實現

首先初始化乙個空的單鏈表,然後在單鏈表中依次插入1-10個元素,然後翻轉單鏈表,然後列印單鏈表.

#include#include#include#include#include#include#includestruct lnode ;

typedef struct lnode* linklist;

/*void initlist(linklist l)

l->next = null;

printf("initlist ok \n");

if(l == null) }*/

int listinsert(linklist l, int i, int e)

while(p && j < i-1)//尋找第i-1個節點

if(!p || j > i-1)

s = (linklist)malloc(sizeof(struct lnode));

s->data = e;

s->next = p->next;

//s->next = null;

p->next = s;

printf("listinsert ok \n");

return 1;

}void printlist(linklist l)

printf("\n");

}linklist reverselist(linklist l)

linklist p;

linklist q;

linklist r;

p = l;

q = l->next;

l->next = null;

while(q)

l = p;

return l;

}void main(void)

l->next = null;

printf("initlist ok \n");

if(l == null)

if(l == null)

for(j=1; j<=10;j++)

listinsert(l,j,j);

printf("在l的表尾依次插入1-10後:\n");

printlist(l);

re_l = reverselist(l->next);//remove head file .begin with first data element 從首元節點開始

printf("翻轉之後的鍊錶:\n");

//printlist(re_l);

ll = (linklist)malloc(sizeof(struct lnode));

ll->next = re_l; //add a head point 新增乙個頭節點

printlist(ll);

}

執行結果:

initlist ok

listinsert ok

listinsert ok

listinsert ok

listinsert ok

listinsert ok

listinsert ok

listinsert ok

listinsert ok

listinsert ok

listinsert ok

在l中插入1-10後:

1  2  3  4  5  6  7  8  9  10  

翻轉之後的鍊錶:

10  9  8  7  6  5  4  3  2  1  

單鏈表翻轉

關於單鏈表的翻轉問題頗為困擾人。下面寫的程式只需遍歷每個節點一次,並且不需要構造輔助接點 通過new的方式 另外這個問題可以轉換為乙個迴圈鍊錶結構,很有意思。h struct node class cdatastruct cpp檔案 cdatastruct cdatastruct void cdat...

單鏈表翻轉

相比之前的那個方法 206.reverse linked list 這個方法比較簡單,直接在鍊錶上面進行逆序 容易理解 此 是用於將帶頭結點的單鏈表進行逆序,思路 1.首先設p結點為第乙個有效結點 即頭結點的下乙個節點 q為p的下乙個節點,原因從後面可知。2.將所給節點從頭結點處斷開,然後讓p結點的...

單鏈表翻轉

struct listnode 1 迭代 在遍歷列表時,我們需要將當前節點的 next 指標改為指向前乙個元素 前乙個元素沒有,所以要先儲存其前乙個元素 在更改引用之前,還需要另乙個指標來儲存後乙個節點 2 就地反轉法 把當前鍊錶的下乙個節點pcur插入到頭結點dummy的下乙個節點中,就地反轉。d...