1. java鏈表怎麼刪除第一個節點
單向鏈表還是雙向的?
是不是就刪除第一個?
那麼可以這樣
public
void
delete()
{
head
=
head.next();
}
如果想鏈尾的把鏈表做成雙端鏈表就簡單很多,如果是普通的就這樣:
public
void
delete()
{
JNode
node
=
head;
JNode
node2
=
null;
while(node.next!=null)
{
node2
=
node;
node
=
node.next;
}
if(node==head){
head
=
null;
}
else
node2.next
=
null;
}
2. 刪除單向鏈表中給定位置的結點。要求分三種情況討論,java語言
情況一:當刪除的是第一個元素,需要把鏈頭重新設置為此元素的
下一個元素
屬性;
情況二:當刪除的元素在鏈中間,需要把其前一個元素的
下一位
屬性設置為此元素的下一位屬性;
情況三:當刪除的元素為鏈尾,就把前一個元素的下一位屬性設置為NULL。
3. java鏈表中刪除一個節點的操作跟指向下一個節點的操作一樣,那最後鏈表不就空了
用已經封裝好的ArrayList可以很方便的完成要求:
List<Integer> list = ...// 操作的鏈表
for(int i=0; i<list.size; ){
int val = list.get(i);
if(val < max){
list.remove(i);
}else{
i++;
}
}
java鏈表刪除一個節點的原理是這樣的,prev->curr->next,prev是當前節點curr的前一個節點,next是curr的下一個節點,刪除curr就是讓prev直接指向next即可,結果為prev->next,這樣就行了,curr由於沒有被引用,會被垃圾回收器回收。至於你說的鏈表空了,是從何而來?
4. Java AQS如何清除垃圾節點
根據清除演算法,整理演算法,復制演算法,分代演算法進行清除。
清除演算法為標記無用對象,然後進行清除回收,缺點為效率不高,無法清除垃圾碎片。
整理演算法是標記無用對象,讓所有存活的對象都向一端移動,然後直接清除掉端邊界以外的內存。
復制演算法是按照容量劃分二個大小相等的內存區域,當一塊用完的時候將活著的對象復制到另一塊上,然後再把已使用的內存空間一次清理掉。缺點是內存使用率不高,只有原來的一半。
分代演算法是根據對象存活周期的不同將內存劃分為幾塊,一般是新生代和老年代,新生代基本採用復制演算法,老年代採用標記整理演算法。
5. java刪除鏈表節點 ,請教大神,
因為你訪問的對象實際是對象的引用,當prev=node執行,即prev指向node當前指向的對象,第一次循環時就是指向了「圓圓」;接下來執行node=node.next,則node指向了「方方」,此時並不會對prev造成影響,prev將繼續指向「圓圓」。、
你應該是把兩個概念混淆了,當被改變的是對象本身的內容(而不是引用指向的對象)時,才會出現你說的那種情況。比如你在prev=node執行後把對象的欄位從「圓圓」改成「XX」
6. java語言 刪除單鏈表的一個節點
node* temp= p;
temp->next=p->next;
delete p;
7. JAVA中如何刪除樹中所選的節點
//獲得商品分類樹形結構
private JTree getTree(){
if(tree ==null)
{
tree = new JTree(getTreeModel());
tree.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
// tree = new JTable(getModel());
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
// 節點選擇事件
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
treeSelection();
}
});
tree.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
if(e.getButton()==MouseEvent.BUTTON3)
{
int selRow = tree.getRowForLocation(e.getX(), e.getY());
tree.setSelectionRow(selRow);
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if(selRow != -1) {
if(e.getClickCount() == 1) {
// myRightClick(selRow, selPath);
selectedNode = (DefaultMutableTreeNode) selPath.getLastPathComponent();
showPopMenu(selRow,selPath,e.getX(),e.getY());
}
}
}
}
});
}
return tree;
}
/**
* 獲得當前選擇的商品對象
* @return
*
*/
private Goods getSelectedGoods(){
int row = table.getSelectedRow();
if(row!=-1)
{
String code = (String)getModel().getValueAt(row,0);
Goods g= gHandle.getGoodsByCode(code);
return g;
}
return null;
}
/**
* 樹形結構上顯示右鍵菜單
* @param selRow
* @param selPath
*
*/
private void showPopMenu(int selRow, TreePath path,int x,int y) {
// tree.add(getPopMenu());
if (path == null)
return;
//點的是根結點
if(selectedNode.isRoot())
{
JPopupMenu pop = getPopMenu(1,path,selRow);
// System.out.println(selRow);
this.getContentPane().add(pop);
pop.show(tree,x,y);
}
//葉結點
if(selectedNode.isLeaf())
{
JPopupMenu pop = getPopMenu(0,path,selRow);
this.getContentPane().add(pop);
pop.show(tree,x,y);
}
}
/**
* 創建右鍵菜單
* @param action
* @return
*
*/
private JPopupMenu getPopMenu(int action,final TreePath path,final int selRow){
if(pop==null)
{
pop = new JPopupMenu();
//新建類別事件處理
addItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String value = JOptionPane.showInputDialog("請輸入新類別的名稱:");
if(value==null||value.trim().length()==0)
return;
GoodsCategoryHandle gcHandle = new GoodsCategoryHandle();
if(gcHandle.isExsited(value))
{
JOptionPane.showMessageDialog(null, "該類別名稱已經存在!", "提示", JOptionPane.ERROR_MESSAGE);
return ;
}
DefaultMutableTreeNode newNode =new DefaultMutableTreeNode(value);
treeModel.insertNodeInto(newNode,(MutableTreeNode)treeModel.getRoot(),selRow-1);
GoodsCategory gc = new GoodsCategory();
gc.setCategoryName(value);
//更新到資料庫中
gcHandle.addCategory(gc);
}
});
//重命名類別名稱事件處理
renameItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String value = JOptionPane.showInputDialog(null,"請輸入新類別的名稱:",selectedNode.toString());
if(value==null||value.trim().length()==0)
return;
GoodsCategoryHandle gcHandle = new GoodsCategoryHandle();
if(gcHandle.isExsited(value))
{
JOptionPane.showMessageDialog(null, "該類別名稱已經存在!", "提示", JOptionPane.ERROR_MESSAGE);
return ;
}
GoodsCategory gc =gcHandle.getCategory(selectedNode.toString());
gc.setCategoryName(value);
//更新到資料庫中
gcHandle.modifyCategory(gc);
selectedNode.setUserObject(value);
tree.setModel(getTreeModel());
}
});
//移除結點事件處理
delItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int i =JOptionPane.showConfirmDialog(null,
"慎重!刪除類別後,該類別下的所有商品將全部被刪除,確認後繼續", "提示", JOptionPane.YES_NO_OPTION);
if(i==JOptionPane.YES_OPTION)
{
GoodsCategoryHandle gcHandle = new GoodsCategoryHandle();
GoodsHandle gHandle = new GoodsHandle();
int id = (gcHandle.getCategory(selectedNode.toString().trim())).getCategoryId();
ArrayList al = gHandle.getGoodsByCategory(id);
boolean b_bak = false;
//對刪除商品的備分
try {
FileWriter out = new FileWriter("/"+CommonUtil.getTime()+"商品刪除bak.db",true);
out.write("商品名稱"+" "+"商品分類"+" "+
"商品別名"+" "+"商品單位"+" "+
"商品廠商"+" "+"商品庫存上限"+" "+
"商品庫存下限"+" "+
"商品庫存下限"+" "+
"商品參考售價"+" "+
"商品實際庫存");
out.write('\n');
for(int j=0;j<al.size();j++)
{
Goods g = (Goods)al.get(j);
out.write(g.toString());
out.write('\n');
}
out.close();
b_bak=true;
} catch (IOException e1) {
e1.printStackTrace();
b_bak = false;
}
gcHandle.setCommit(false);
boolean g_del=gHandle.deleteByCategoryId(id);
boolean gc_del=gcHandle.deleteById(id);
//只有類別刪除成功,該類別下的商品刪除成功,並且備分成功後才提交刪除
if(g_del&&gc_del&&b_bak)
gcHandle.commit();
else
{
// System.out.println("fail");
gcHandle.rollBack();
JOptionPane.showMessageDialog(null, "刪除失敗,可能是因為該類別下的商品存在銷售記錄,不能被刪除!", "提示", JOptionPane.ERROR_MESSAGE);
}
tree.setModel(getTreeModel());
tree.setSelectionRow(0);
}
else
return;
}
});
pop.add(addItem);
pop.add(delItem);
pop.add(renameItem);
}
if(action ==1)
{
delItem.setEnabled(false);
renameItem.setEnabled(false);
}
if(action ==0)
{
delItem.setEnabled(true);
renameItem.setEnabled(true);
}
return pop;
}
/**
* 用戶在商品分類樹上的事件處理
*
*
*/
private void treeSelection(){
TreePath path = tree.getSelectionPath();
if (path == null)
return;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
.getLastPathComponent();
selectedCategory = cHandle.getCategory(node.toString());
// 若選中的是根節點
if (node.isRoot())
showAllGoods();
if(node.isLeaf()){
model.setRowCount(0);
ArrayList al = gHandle.getGoodsByCategoryName(node
.toString());
for (int i = 0; i < al.size(); i++) {
Goods g = (Goods) al.get(i);
model.addRow(getRow(g));
}
}
}
public GoodsCategory getCategory(){
return this.selectedCategory;
}
/**
* 生產樹形列表的數據模型
*
* @return
*
*/
private TreeModel getTreeModel() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode(
PropertiesUtil.getString("categoryTree.all"));
ArrayList categoryList = cHandle.getAllCategory();
// 添加子節點
for (int i = 0; i < categoryList.size(); i++) {
GoodsCategory gc = (GoodsCategory) categoryList.get(i);
String name = gc.getCategoryName();
DefaultMutableTreeNode node = new DefaultMutableTreeNode(name);
root.add(node);
}
// 生產treeModel
treeModel = new DefaultTreeModel(root);
return treeModel;
}
8. java刪除xml文件節點
java刪除xml文件節點,主要方式是先解析整個xml文件,然後根據節點的編號,進行刪除,代碼如下:
packagetest;
importjava.io.IOException;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.transform.Transformer;
importjavax.xml.transform.;
importjavax.xml.transform.TransformerException;
importjavax.xml.transform.TransformerFactory;
importjavax.xml.transform.dom.DOMSource;
importjavax.xml.transform.stream.StreamResult;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.NodeList;
importorg.w3c.dom.Text;
importorg.xml.sax.SAXException;
publicclassXmlOprate{
Documentdoc;
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder;
NodeListimags;
Stringpath;
publicNodeListgetImags(){
returnimags;
}
publicvoidsetImags(NodeListimags){
this.imags=imags;
}
/**
*構造方法
*@parampath:xml文件的路徑
*@paramnodes:要解析的xml節點名稱
*/
publicXmlOprate(Stringpath){
super();
this.path=path;
System.out.println(System.getProperty("user.dir"));
}
/**
*解析XML
*@parampath
*/
publicvoidreadXml(){
try{
builder=factory.newDocumentBuilder();
Documentdoc=builder.parse(path);
doc.normalize();
NodeListimags=doc.getElementsByTagName("imags");
this.setImags(imags);
for(inti=0;i<imags.getLength();i++){
Elementlink=(Element)imags.item(i);
System.out.print("title:");
System.out.println(link.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
System.out.print("URL:");
System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue());
System.out.print("imgsrc:");
System.out.println(link.getElementsByTagName("imgsrc").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}catch(ParserConfigurationExceptione){
e.printStackTrace();
}catch(SAXExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*deletexmlcode//刪除某個節點
*@parampath
*/
publicvoiddelXmlCode(){
try{
builder=factory.newDocumentBuilder();//拿到樹節點
doc=builder.parse(path);
doc.normalize();
NodeListimags=doc.getElementsByTagName("imags");//拿到某個節點的ID,接著進行刪除
Elementelink=(Element)imags.item(0);
elink.removeChild(elink.getElementsByTagName("imgsrc").item(0));
elink.removeChild(elink.getElementsByTagName("title").item(0));
elink.removeChild(elink.getElementsByTagName("url").item(0));
doc.getFirstChild().removeChild(elink);
TransformerFactorytFactory=TransformerFactory.newInstance();
Transformertransformer=tFactory.newTransformer();
DOMSourcesource=newDOMSource(doc);
StreamResultresult=newStreamResult(newjava.io.File(path));
transformer.transform(source,result);
}catch(ParserConfigurationExceptione){
e.printStackTrace();
}catch(SAXExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(e){
e.printStackTrace();
}catch(TransformerExceptione){
e.printStackTrace();
}
}
}
9. java數據結構中刪除節點問題,為什麼p=n
p指的事 頭結點。然後 n指向p的下一個節點,, 取得n的值與傳進來的進行比較。 相等 就將p的下一個節點設置為 n的下一個節點。 這樣就把n的跳過去了。!讓p=n是為了 一個個的節點往下找!! 類似遍歷!!
10. Java 刪除鏈表的頭節點!
邏輯上,這樣:讓head=head.next; 頭就沒掉了。
public Node deletehead(){
Node temp=head.next;
head=temp;
return temp;
}