演算法 反轉單向鍊錶和雙向鍊錶

2022-08-22 07:45:12 字數 1358 閱讀 2602

分別實現反轉單向鍊錶和雙向鍊錶的函式。

如果鍊錶長度為n,時間複雜度為o(n),額外空間複雜度要求為o(1)。

反轉單向鍊錶:

public

class node

public

int value;

public node next;
}
public

static node reverselist(node node)

return pre;
}

反轉雙向鍊錶:

public

class doublenode

public

int value;

public doublenode next;
public doublenode pre;
}
public

static doublenode reverselist(doublenode node)

return pre;
}
反轉部分單向鍊錶:

給定乙個單向鍊錶的頭結點head,以及兩個整數from和to,在單向鍊錶上把第from個節點到第to個節點這一部分進行反轉。

如果不滿足1<=from<=to<=n,則不用調整。

核心思路:

找到from的前乙個節點和to的後乙個節點。

public

class node

}
public

static node reversepart(node node,int from,int to)

//不滿足條件時,直接返回head
if (from>to||from<1||to>len)
//node1表示from的位置上的節點
//判斷反轉的部分是否包含頭結點,由於最後是返回head還是返回node1是不確定的,所以這一步的判斷也是很必要的
//如果反轉的部分包含頭結點,那麼返回node1,因為head改變了,否則返回head
node1=fpre==null?head:fpre.next;
node node2=node1.next;
//將要反轉的第乙個節點與tpos連線起來
node1.next=tpos;
node next=null;
while(node2!=tpos)
if (fpre!=null)
return node1;
}

反轉單向和雙向鍊錶

package class 03 反轉單向和雙向鍊錶 題目 分別實現反轉單向鍊錶和反轉雙向鍊錶的函式。要求 如果鍊錶長度為n,時間複雜度要求為o n 額外空間 複雜度要求為o 1 public class code 07 reverselist public static node reversel...

反轉單向和雙向鍊錶

package practice 反轉單向和雙向鍊錶 題目 分別實現反轉單向鍊錶和反轉雙向鍊錶的函式 要求 如果鍊錶長度為n,時間複雜度要求為o n 額外空間複雜度要求為o 1 author colin.chen public class revisenode public static node ...

反轉單向和雙向鍊錶

說明 本文是左程雲老師所著的 程式設計師面試 指南 第二章中 反轉單向和雙向鍊錶 這一題目的c 復現。本文只包含問題描述 c 的實現以及簡單的思路,不包含解析說明,具體的問題解析請參考原書。感謝左程雲老師的支援。題目 分別實現反轉單向鍊錶和反轉雙向鍊錶的函式。要求 如果鍊錶長度為 n,時間複雜度要求...