這樣的思路用代碼實現主要是有四行(具體內容懶得寫了,做爲一隻摸魚王),核心四行在就可
//作一個自定義函數,如link *turnlink,加一個for循環,進行以下四行 lm->next=lm->next->next; lr->next=fh->next; fh->next=lr; lr=lm->next; //若是你要實現這個,先搞個鏈表是基本 link *CreatLink(){ link*p=(link*)malloc(sizeof(link)); link *temp=p; int i; for(i=0;i<5;i++){ link *a=(link*)malloc(sizeof(link)); a->data=i; a->next=NULL; temp->next=a; temp=temp->next; } } //還有開頭定義結構體,雖然我喜歡用#ifndef和#endif搞個項目文件,看起來很舒服的那種 typedef struct node{ int data; struct node *next; }link; //而後自定義一個函數,再外部放一個for循環,把四行代碼放進去,大概循環幾回,就能夠反轉完畢
```java //放上學長的java代碼塊 public ListNode reverseList(ListNode head) { if(head == null) { return null; } ListNode fakeHead = new ListNode(0); fakeHead.next = head; ListNode lr = head.next; while ( head.next != null ) { head.next = head.next.next; lr.next = fakeHead.next; fakeHead.next = lr; lr = head.next; } return fakeHead.next; }
感謝宇彬學長大佬的思路提供,感受超棒!超清晰的思路;
至此,我還有一個方法但願你們能夠批評指正java
核心在於,咱們申請一個新的結點,併爲其申請內存
而後再0,1,2,3,4的狀況下
以下圖(畫圖有點簡陋,沒有ipad…)
node
如圖,先讓新結點與2相等,而後讓1(假設爲lm)指向3,也就是lm->next->next,free掉咱們須要替換掉的那個結點
okey
而後讓新的新的結點(假設爲p)指向head(即fh)的next,而後讓fh的next指向p
連接起來,okey
算法
(但在算法分析上,這個方法的時間複雜度可能比較讓人難愛)函數
這就是鏈表,兩種新的思路。(其實還有第三種,大概思路是上兩種的綜合,就不作概論了)
感謝學長!!!!!!!
spa
(ps:畫圖是本身畫的,比較粗糙,第一次發blog,有點簡陋,求包涵)
(題來源於leetcode206)
3d