對單鏈表進行反轉

2021-10-07 06:28:35 字數 2435 閱讀 2321

初始的單鏈表

headnode(不顯示)->node1->node2->node3

構建乙個頭結點newheadnode(不顯示),遍歷初始單鏈表,移到新的頭結點後面

newheadnode(不顯示)->node1

newheadnode(不顯示)->node2->node1

newheadnode(不顯示)->node3->node2->node1

然後再把newheadnode後面的節點移回去。

headnode->->node3->node2->node1

package linkedlist;

/* 1.對鍊錶進行相關操作

*/public

class

singlelinkedlistdemo

// 0.1 統計單鏈表中的有效節點個數

public

static

intgetlength

(heronode hero)

temp = temp.next;

length++;}

return length;

}public

static heronode getreversenode

(heronode headnode,

int number)

count++

; temp = temp.next;

}return temp;

}// 除了頭部head之外的節點都要反轉

public

static

void

reverselinkedlist

(heronode head)

else

head.next = newhead.next;}}

}/** 2.對單鏈表定義「增刪改查」方法

*/class

singlelinkedlist

// 2.1 追加資料到鍊錶尾部(不排序)

public

void

addtoend

(heronode hero)

temp = temp.next;}

temp.next = hero;

}// 2.2 追加資料到鍊錶(根據序號從小到大排序)

public

void

addwithorder

(heronode hero)

// 判斷有沒有找到節點

if(temp.next.number > hero.number)

else

if(temp.next.number == hero.number)

temp = temp.next;

}// 必須要到while外面去追加節點,否則在while裡面會走不到加節點的那一步if(

!flag)

hero.next = temp.next;

temp.next = hero;

}// 2.3 刪除節點資訊

public

void

delnode

(int number)

if(temp.next.number == number)

temp = temp.next;}}

// 2.4 修改節點資訊

public

void

revisenode

(int number, string name, string nickname)

if(temp.next.number == number)

temp = temp.next;}}

// 2.5 檢視鍊錶資料

public

void

showlinkedlist()

temp = temp.next;

system.out.

println

(temp);}

}}/* * 3.heronode->定義英雄人物。

*/class

heronode

![在這裡插入描述]

單鏈表反轉

單鏈表反轉,可以用迴圈做,當然也可以遞迴 詳見 include includestruct node 3 1 4 6 2 1 1 3 4 6 2 2 4 1 3 6 2 3 6 4 1 3 2 4 2 6 4 1 3 5 迴圈反轉,即依次改動3個指標值,直到鍊錶反轉完成 比如,上面第 1 行到第 2...

反轉單鏈表

include stdafx.h include include using namespace std struct listnode typedef listnode plistnode typedef plistnode list list creatlist return head void...

單鏈表反轉

想起很早以前某次面試,面試官很嚴肅的要求我現場手寫單鏈表反轉的 哥虎軀一震,心想 不就需要要個臨時變數來記錄位址嗎,用得著這樣煞有介事?雖然在那之前我的確沒寫過這個程式,哈哈哈 當時我草草寫了十來行 面試官不等我完成,就直接拿過去開始問問題。不知道是不是因為抗壓能力不足,在面試官的不斷 盤問 下,哥...