關於鍊錶的一些題目

2021-09-25 21:17:13 字數 2645 閱讀 1365

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中是否也存在,找出存在的資料就是兩個鍊錶...