鏈表反轉的兩種思路及算法


這樣的思路用代碼實現主要是有四行(具體內容懶得寫了,做爲一隻摸魚王),核心四行在就可

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

//作一個自定義函數,如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

相關文章
相關標籤/搜索