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