Ⅰ 用java來編寫一個單鏈表類的成員函數,實現對頭結點的單鏈表就地逆置的操作
逆置有兩種方法,第一是把所有節點反過來。還有一種就是改變節點中的值。
第一種情況,其實可以考慮用頭插法,來實現逆置。
下面的演算法是基於頭插法的思想,逆置鏈表的,僅供參考。
LinkList anti_linklist(LinkList demo)
{
LInkList *p,*q;//work pointer
LinkList head;
head=new LinkList();
head->next=null;//init head pointer
p=demo->head->next;//make p points to the first node
if(p==null)
return null;//the linklist is null
while(p!=null)
{
q=p;
q->next=head->next;
head->next=q;
p=p->next;
}
}
Ⅱ 設有一個表頭為first的單鏈表,式設計一個演算法,通過遍歷一趟鏈表,將鏈表中所有節點按逆序鏈接
演算法思想
一次遍歷鏈表,並將結點指針反轉,在逆置的時候要注意單鏈表兩端的處理(即表頭結點和表尾結點)
LinkList ReverseLinkList( LinkList L)
{
Lnode *p, *pre, *s;
p = L -> next;
s = p -> next;
p -> next = NULL;//處理第一個結點,指針指向NULL,因為逆置後它將是尾結點
while( s != NULL) //當s為空的時候說明p已經指向鏈表的最後節點了
{
pre = p;
p = s;
s = s ->next;
p -> next = pre; //指針反轉
}
L ->next = p; //處理最後一個結點,頭結點的指針指向它
return L;
}