好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > go實現反轉鏈表

go實現反轉鏈表

熱門標簽:評價高的400電話辦理 外呼系統用什么卡 百度地圖標注后傳給手機 外呼系統顯本地手機號 壽光微信地圖標注 阿克蘇地圖標注 電話機器人軟件免費 excel地圖標注分布數據 涿州代理外呼系統

反轉鏈表首先討論特殊節點

如果節點在首位,則反轉之后,首位節點的next值為nil。

func reverse(head *ListNode) *ListNode {
 bnode := head//設置默認遍歷的前節點,為head
 temp := head.Next//從head.next節點開始遍歷鏈表
 flage := 0//設置一個標記,用于判斷是否為第一個節點
 var lnext *ListNode//用于臨時保存下一個節點
 for temp != nil {//遍歷當
  lnext = temp.Next//先將遍歷節點的下一個節點進行保存
  temp.Next = bnode//節點反轉,將此節點的next值進行更改,更改為上一個節點
  if flage == 0 {//如果是第一個節點,則flage為0
   bnode.Next = nil//第一個節點翻轉后的next值為nil
   flage = 1//將flage值進行更改,避免之后的節點的next值被更改為nil
  } 
  bnode = temp//將節點進行更新,前節點更改為遍歷節點
  temp = lnext//節點進行更新,由于之前temp.next值已經被更改,但是temp.next值被保存在變量中所以temp = lnext
 }
 return bnode//返回bnode節點,不能返回temp節點,temp為空,因為temp為空是跳出for循環的標志
}

補充:golang 鏈表逆序反轉輸出

鏈表逆序輸出案例代碼

//如何實現鏈表的逆序
package main
import "fmt"
type studentNode struct {
	no   int
	name string
	age  int
	next *studentNode
	pre  *studentNode
}
func reversePrint(head *studentNode) {
	//1.創建一個輔助結點
	temp := head
	//2.判斷這是不是一個空鏈表
	if temp.next == nil { //說明是一個空鏈表
		return
	}
	//3.讓temp指向這個雙向鏈表的最后結點
	for {
		if temp.next == nil {
			break
		}
		temp = temp.next
	} //循環結束則已經指向雙向鏈表的最后結點
//4.遍歷這個鏈表
for{
	fmt.Printf("%d,%s,%d==>",temp.no,temp.name,temp.age)
	temp=temp.pre//依次向前
	if temp.pre==nil{//判斷是不是到了鏈表頭
		break
	}
}
}
func insertStudentNode(head *studentNode, newStudentNode *studentNode) {
	//思路:
	//1.先找到該鏈表的最后這個結點
	//2.創建一個輔助結點
	temp := head
	for {
		if temp.next == nil { //表示找到最后
			break
		}
		temp = temp.next //讓temp不斷的指向下一個結點
	}
	//3.將newStudentNode加入到鏈表的最后
	temp.next = newStudentNode
	newStudentNode.pre=temp
}
//正序打印這個雙向鏈表
func originalList(head *studentNode) {
//1.創建一個輔助結點
temp:=head
//2.先判斷這個鏈表是否是空鏈表
if temp.next==nil{
	fmt.Println("這是一個空鏈表")
	return
}
//3.遍歷這個鏈表
for{
	fmt.Printf("%d,%s,%d==>",temp.next.no,temp.next.name,temp.next.age)
	temp=temp.next
if temp.next == nil{
	break
}
}
}
//創建一個雙向鏈表
func createlink()*studentNode {
	//1.先創建一個頭結點
	head := studentNode{}
	//2.創建一個新的studentNode
	stuLisa := studentNode{
		no:   1,
		name: "Lisa",
		age:  24,
	}
	stuBob := studentNode{
		no:   2,
		name: "Bob",
		age:  25,
	}	
	stuNick := studentNode{
			no:   3,
			name: "Nick",
			age:  27,
		}
		stuMark := studentNode{
			no:   4,
			name: "Mark",
			age:  29,
		}
		//3.加入結點
		insertStudentNode(head, stuLisa)
		insertStudentNode(head, stuBob)
		insertStudentNode(head, stuNick)
		insertStudentNode(head, stuMark)
		return head
}
//逆序打印這個雙向鏈表
func main() {
	head :=createlink()
	fmt.Println("正序打印")
	originalList(head)
	fmt.Println()
	fmt.Println("逆序打印")
	reversePrint(head)
}

結果

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 詳解go語言單鏈表及其常用方法的實現
  • python/golang 刪除鏈表中的元素
  • python/golang實現循環鏈表的示例代碼
  • Go實現雙向鏈表的示例代碼
  • golang雙鏈表的實現代碼示例
  • Go語言單鏈表實現方法

標簽:汕頭 蘭州 雞西 銅川 梅河口 重慶 吐魯番 欽州

巨人網絡通訊聲明:本文標題《go實現反轉鏈表》,本文關鍵詞  實現,反轉,鏈表,實現,反轉,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go實現反轉鏈表》相關的同類信息!
  • 本頁收集關于go實現反轉鏈表的相關信息資訊供網民參考!
  • 推薦文章