>  기사  >  백엔드 개발  >  Golang에서 역방향 연결 목록을 구현하는 방법을 설명하는 기사

Golang에서 역방향 연결 목록을 구현하는 방법을 설명하는 기사

藏色散人
藏色散人앞으로
2021-07-19 14:37:003004검색

문제: 단일 연결 목록을 뒤집습니다.

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

먼저 연결 목록의 데이터 구조를 알아 보겠습니다.

연결 목록 노드에는 두 가지 요소가 있습니다.

  • value
  • Pointer
type ListNode struct {
    Val  int
    Next *ListNode
}

다음은 다음 노드를 가리킵니다

이 질문은 실제로 포인터가 이전 노드를 가리킵니다

Number of positionchanges pre cur whole
0 nil 1->2-> ;3->4-& gt; 5 1->2->3->4->5
1 1->nil 2->-3> ;->4->5 2->3->4->5->1->nil
2 2->1->nil 3->4->5 3->4->5->2->1->없음
3 3->2->1-> ;nil 4->5 4->5->3->2->1->nil
4 4->3->2-> ;1->nil 5 5->4->3->2->1->nil

보시다시피

  • pre가 의 앞사람입니다. cur(pre = cur)
  • cur는 현재 위치 뒤에 있는 연결 리스트 요소(cur = cur.Next)
  • cur.Next는 pre(cur.Next = pre)에 연결되어야 합니다.
전체 코드:
package main

import "fmt"

//链表节点
type ListNode struct {
    Val  int
    Next *ListNode
}

//反转链表的实现
func reversrList(head *ListNode) *ListNode {
    cur := head
    var pre *ListNode = nil
    for cur != nil {
        pre, cur, cur.Next = cur, cur.Next, pre //这句话最重要
    }
    return pre
}

func main() {
    head := new(ListNode)
    head.Val = 1
    ln2 := new(ListNode)
    ln2.Val = 2
    ln3 := new(ListNode)
    ln3.Val = 3
    ln4 := new(ListNode)
    ln4.Val = 4
    ln5 := new(ListNode)
    ln5.Val = 5
    head.Next = ln2
    ln2.Next = ln3
    ln3.Next = ln4
    ln4.Next = ln5

    pre := reversrList(head)
    fmt.Println(pre)
}

더 많은 golang 관련 기술 기사를 보려면 golang 튜토리얼 칼럼을 방문하세요!

위 내용은 Golang에서 역방향 연결 목록을 구현하는 방법을 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제