劍指offer 反轉鍊錶

2021-10-02 12:49:16 字數 1777 閱讀 2499

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。

該題目有兩種解題思路,遞迴方式與非遞迴方式,直接給出**,在**中給出重要問題及其解釋

static

class

listnode

}public listnode reverselist

(listnode head)

// 先修改pnode.next的指向,在更改ppre的值

pnode.next = ppre;

ppre = pnode;

pnode = pnext;

}return reverselisthead;

}public

void

print

(listnode head)

system.out.

println

("null");

}public

static

void

main

(string[

] args)

for(

int i =

0;i1;i++

)// a[num-1].val = num-1;

a[num-1]

.next = null;

nk5_reverselist nk =

newnk5_reverselist()

; nk.

print

(a[0])

; nk.

print

(nk.

reverselist

(a[0])

);}

static

class

listnode

}// 使用遞迴來解決這個問題

listnode reverselist

(listnode head)

//先反轉後面的鍊錶,走到鍊錶的末端結點

listnode preversenode=

reverselist

(head.next)

;//再將當前節點設定為後面節點的後續節點

listnode t = head.next;

//將head.next後面的鍊錶看為乙個整體,修改指向

t.next=head;

// 翻轉鍊錶

head.next=null;

return preversenode;

}public

void

print

(listnode head)

system.out.

println

("null");

}public

static

void

main

(string[

] args)

for(

int i =

0;i1;i++

)// a[num-1].val = num-1;

a[num-1]

.next = null;

nk5_reverselist2 nk =

newnk5_reverselist2()

; nk.

print

(a[0])

; nk.

print

(nk.

reverselist

(a[0])

);}

劍指offer 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。方法1 將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。方法2 使用三個指標遍歷單鏈表,逐個鏈結點進行反轉。方法3 從第2個節點到第n個節點,依次逐節點插入到第1個節點 head節點 之後,最後將第乙個節點挪到新錶的表尾。public class l...

劍指offer 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。1.非遞迴 struct listnode class solution listnode ppre null listnode p phead listnode pnext null while p null else p pnext return p...

《劍指offer》 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。之前錯誤的寫法,一直不明白 原因是移位的時候,pcurr移到下一位時,裡面的值已經變成反向指標了,所以不能成功移動,就迴圈巢狀進去了,所以還需要乙個變數pnext來儲存移位前的值。struct listnode class solution phead ...