演算法 重排鍊錶

2022-03-24 07:13:59 字數 1494 閱讀 1690

/**

* definition for singly-linked list.

* public class listnode

* listnode(int val)

* listnode(int val, listnode next)

* } */

class

solution

//通過快慢指標方法找到鍊錶中間節點,如果是偶數節點個數,則是前半部分最後乙個節點,使用dummy節點方便處理

listnode dummy = new

listnode();

dummy.next =head;

listnode fast =dummy;

listnode slow =dummy;

while(fast != null && fast.next != null

)

//鍊錶後半部分反轉,頭插法

listnode cur =slow.next.next;

listnode tail =slow.next;

while(cur != null

) tail.next = null

;

//重排

listnode headpoint =head;

while(slow.next != null && slow !=headpoint)

}}

方法二: 遞迴

/**

* definition for singly-linked list.

* public class listnode

* listnode(int val)

* listnode(int val, listnode next)

* } */

class

solution

// 計算鍊錶長度

int size = 0;

listnode headpoint =head;

while(headpoint != null

) listnode tail =reverse(head,size);

}// 根據鍊錶長度遞迴,並在每次遞迴中返回上層需要處理的尾節點的指標

listnode reverse(listnode head,

intlength)

if(length == 2)

listnode tail = reverse(head.next,length - 2);

listnode tailnext =tail.next;

listnode tmpheadnext =head.next;

head.next =tail;

tail.next =tmpheadnext;

return

tailnext;

}}

leetcode演算法題 重排鍊錶

1 map void reorderlist listnode head for int i 0,j n 1 i,j 2 遞迴 void reorderlist listnode head int len 0 listnode p head while p null reorderlisthelpe...

pta重排鍊錶

本文提供pta重排鍊錶的兩種方法,兩種都是使用陣列模擬鍊錶的操作,區別在與所使用空間的大小不同,從而導致時間複雜度也不同。重排鍊錶的第一種方法 這種方法節省了很多空間,但在n非常大時會超時。include include includetypedef struct node list struct ...

leetcode 重排鍊錶

1.使用快慢指標,將鍊錶分成前後兩個部分 listnode fast head listnode slow head while fast null fast.next null listnode mid slow solw指向中間節點 listnode first head listnode se...