2.刪除遞增有序鍊錶中大於min,小於max的元素
3.逆置鍊錶
4. 合併兩個鍊錶
4. 合併n個鍊錶(分治法)
測試**:
前乙個與後乙個比較,相同就刪除結點,並釋放記憶體。
返回頂部
先找到兩個前驅,釋放中間結點,並且將鍊錶重新鏈起來。
返回頂部
public listnode reverselist(listnode head)
return pre;
}
總是做相同的事,就可以考慮遞迴的方法。
pnode re_list(node *node)
}void linklistreverse2(pnode &phead)
node *tmp = re_list(phead);
phead = tmp;
}
返回頂部
public listnode mergetwolists(listnode l1, listnode l2) else
p = p.next;
}if (l1 != null) else if (l2 != null)
return head.next;
}
public listnode mergeklists(listnode lists)
// 將n個鍊錶以中間為對稱,兩兩合併
while(len>1) node, *pnode;//node等價於struct student st||pnode等價於struct node *next
pnode inputstudent(void)
pnode ptail = phead;//定義乙個指向頭結點的指標
ptail->next = null;//清空指標域
printf("請輸入個數:");
scanf("%d",&len);
for(int i=0; i>stu.data;
pnode pnew = (pnode)malloc(sizeof(node)); //為新節點分配記憶體
if(null == pnew) //判斷記憶體是否為空
pnew->data = stu.data;//初始化結點的資料域
ptail->next = pnew;//將新結點掛到老結點後
pnew->next = null;//清空新結點的指標域
ptail = pnew;//將ptail移到新結點上
} return phead;
}void outputstudent(pnode phead)//輸出鍊錶
}void deleteequal(pnode &phead)
while (p)
else
}}void deleteselect(pnode &phead,int min,int max)
if(p->next->data>=max)
p=p->next; }
pnode temp,start;
start=minprev->next;
while(start->data!=maxprev->data)
minprev->next=maxprev->next;
free(maxprev);
maxprev=null;
}void linklistreverse(pnode &l)
//迴圈出來後,最後的指標逆置
current->next=pre;
nextnode->next=current;
l->next=nextnode; //頭結點放上就行了
}pnode re_list(node *node)
}void linklistreverse2(pnode &phead)
node *tmp = re_list(phead);
phead = tmp;
} int main(){
pnode l= inputstudent();
cout
// cout返回頂部
關於鍊錶的一些總結
1.在鍊錶頭部新增空頭以消除頭部特殊判斷比較常見,用於刪除和新增元素,啞結點的意思就是在head第乙個節點之前設立乙個節點。2.因為鍊錶的操作有限,所以很多時候我們可以把鍊錶中的元素儲存在陣列中,進行操作。3.鍊錶從前往後遍歷元素簡單,但是從後往前遍歷元素確實困難重重,所以我們可以使用棧來儲存資料,...
關於雙向鍊錶的一些分析
一 插入操作 insert 一 基本原理 雙鏈表就好像是手拉手站成一排的人,每個人的右手 next 拉著下乙個人,左手 prior 拉著前乙個人,每兩個人之間有兩支手互聯.插入操作實際是 向隊伍中增加人員,他需要拉上左右兩邊的人,即共三個人要發生關係,由於每兩個人之間有兩支手互聯,所以要發生4次操作...
5 一些關於鍊錶的練習
1 給定兩個已經排序好的表l1,l2,只用基本的表操作編寫計算l1 l2的過程。std vectorinterse linklist l1,linklist l2 l1 l1 next return temp 原理就是 遍歷l1的結點,然後找出l1的結點在l2中是否也存在,找出存在的資料就是兩個鍊錶...