鍊錶中的一些演算法,Java實現

2021-07-24 13:11:40 字數 1964 閱讀 4147

public class listnode 

public int getdata()

public void setdata(int data)

public listnode getnext()

public void setnext(listnode next)

//鍊錶的遍歷操作

int listlength(listnode headnode)

return length; }

//在單鏈表中插入節點

listnode insertinlinkedlist(listnode headnode,listnode nodeinsert,int position)

//如果傳入的引數越界

int size=listlength(headnode);

if (position>size+1||position<1)

//如果插入的位置為開頭

if (position==1)

//插入位置為中間或者結尾

else

listnode currentnode=prenode.getnext();

nodeinsert.setnext(currentnode);

prenode.setnext(nodeinsert);

} return headnode;

}//刪除鍊錶的節點

listnode deletenode(listnode headnode,int position)else

listnode currentnode=prenode.getnext();

//指向刪除的節點的下個節點

prenode.setnext(currentnode.getnext());

currentnode.setnext(null);

}return headnode;

} //刪除單鏈表

void deletelinkedlist(listnode head)

} //question1.在有序的鍊錶中插入乙個節點

listnode insertsorted(listnode head,listnode newnode)

while (current!=null&¤t.getdata()newnode.setnext(current);

head.setnext(temp);

return head;

} /*

* q2.假設兩個單向鍊錶在某個節點相交後,成為乙個單向鍊錶。list1和list2在相交前的節點數

* 分別為n和m。設計演算法找到兩個鍊錶的合併點。並使時間複雜度最低。

* 以下演算法時間複雜度為o(max(m,n))

* 先讓較長的移動len個節點

*/listnode q2(listnode list1,listnode list2)

while (head2!=null)

//保證head1是較長list的節點

if (l1for (int i = 0; i < len; i++)

head1=head1.getnext();

while (head1!=null&&head2!=null)

return null;

} /*

* q3.如何把兩個有序鍊錶合併成乙個新的有序鍊錶、、、遞迴求解、、、

* */

listnode mergelist(listnode a,listnode b)if (b==null)

if (a.getdata()return result; }

/** q4.如何逐對逆置鍊錶?例如1-2-3-4-x,2-1-4-3-x

* */

//遞迴求解

listnode renode(listnode list)else

return list; }

}

單向鍊錶中的一些演算法

1.在乙個單向鍊錶中,尋找鍊錶中間節點。使用兩個指標,快指標每次步進為2,慢指標每次步進為1。當快指標到達鍊錶尾部時,慢指標指向的就是鍊錶的中間。node findmiddlenode node head return p1 2.在單向鍊錶中尋找倒數第n個元素 思路同1,使用兩個指標,它們之間保持n...

Java 實現鍊錶的一些基本操作

與順序表相同,鍊錶也有增 刪 改 查等操作 下面用 演示 首先定義乙個結點的類,和構造方法 class node 建立乙個鍊錶 public static node createlinkedlist 增操作即插入,可分為頭插尾插 頭插 頭插 public static node pushfront ...

鍊錶的一些操作

判斷兩個鍊錶是否有交點 判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 假設兩個鍊錶都不存在環 相交的煉表示意圖如下所示。兩個沒有環的鍊錶如果是相交於某一結點,如上圖所示,這個結點後面都是共有的。所以如果兩個鍊錶相交,那麼兩個鍊錶的尾結點的位址也是一樣的。程式實現時分別遍歷兩個單鏈表,直到尾結...