導航:首頁 > 源碼編譯 > 單鏈表倒置演算法

單鏈表倒置演算法

發布時間:2023-01-16 22:43:09

㈠ 單鏈表的就地逆置的演算法!!

就地逆置即演算法的輔助空間為O(1)。

思路為:逆置鏈表初始為空,表中節點從原鏈表中依次「刪除」,再逐個插入逆置鏈表的表頭(即「頭插」到逆置鏈表中),使它成為逆置鏈表的「新」的第一個結點,如此循環,直至原鏈表為空。

實現代碼:

voidconverse(LinkList*head)
{
LinkList*p,*q;
p=head->next;
head->next=NULL;
while(p)
{
/*向後挪動一個位置*/
q=p;
p=p->next;

/*頭插*/
q->next=head->next;
head->next=q;
}
}

㈡ 單鏈表的逆置演算法

幫你寫好了,你看下

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
int data;
struct node *next;
}Node;

//創建鏈表
Node *CreatList(void)
{
int i;
Node *head, *p, *q;

head = NULL;
printf("請輸入您要輸入的數據:\n");
scanf("%d", &i);
while(i != 0)
{
p = (Node *)malloc(sizeof(Node));
p->data = i;
if(head == NULL)
q = head = p;
else
q->next = p;
q = p;
scanf("%d", &i);
}
p->next = NULL;
return head;
}

//鏈表的逆置
Node *ReverseList(Node *head)
{
Node *p, *q, *r;

p = head;
q=r=NULL;

while(p)
{
q = p->next;
p->next = r;
r = p;
p = q;
}
return r;
}

//輸出鏈表
void PrintList(Node *head)
{
Node *p;

p = head;
while(p)
{
printf("%d\n", p->data);
p = p->next;
}
}

int main(void)
{
Node *head;

head = CreatList();
printf("鏈表逆置前的數據:\n");
PrintList(head);

head = ReverseList(head);
printf("鏈表逆置後的數據:\n");
PrintList(head);

return 0;
}

請輸入您要輸入的數據:
1 2 3 4 5 6 0
鏈表逆置前的數據:
1
2
3
4
5
6
鏈表逆置後的數據:
6
5
4
3
2
1

閱讀全文

與單鏈表倒置演算法相關的資料

熱點內容
雲伺服器華為雲 瀏覽:12
linux如何操作伺服器環境搭建 瀏覽:814
六度人脈pdf 瀏覽:958
pdf是英文的 瀏覽:475
java數據爬蟲 瀏覽:357
word做成pdf格式 瀏覽:678
批處理編程教程 瀏覽:579
哈希演算法源碼阿里雲 瀏覽:706
vue編譯xcode 瀏覽:495
pdftodjvu 瀏覽:151
jxl讀取exceljava 瀏覽:485
本科學歷學計算機編程 瀏覽:189
電腦中沒有解壓文件如何設置 瀏覽:171
安卓手機如何打開以圖搜圖 瀏覽:192
反編譯後不能搜索位置 瀏覽:482
離心式壓縮機最小轉速 瀏覽:957
什麼叫程序員加班賣命 瀏覽:273
共享文件夾加密碼怎麼加 瀏覽:23
一個程序員可以加班嗎 瀏覽:134
鄰近梯度演算法 瀏覽:572