description
線性鍊錶的基本操作如下:
#include
#include
#define error 0
#define ok 1
#define elemtype int
typedef int status;
typedef struct lnode
lnode,*linklist;
status listinsert_l(linklist &l, int i, elemtype e)
if (!p || j > i-1) return error; // i小於1或者大於表長
s = (linklist)malloc(sizeof(lnode)); // 生成新結點
s->data = e; s->next = p->next; // 插入l中
p->next = s;
return ok;
} // linstinsert_l
status listdelete_l(linklist &l, int i, elemtype &e)
if (!(p->next) || j > i-1) return error; // 刪除位置不合理
q = p->next;
p->next = q->next; // 刪除並釋放結點
e = q->data;
free(q);
return ok;
} // listdelete_l
設有一線性表a=(a0,a1,…, ai,…an-1),其逆線性表定義為a』=( an-1,…, ai,…,a1, a0),設計乙個演算法,將線性表逆置,要求線性表仍占用原線性表的空間。
輸入格式
第一行:輸入n,表示單鏈表的元素個數
第二行:輸入單鏈表的各元素,用空格分開
輸出格式
第一行:輸出單鏈表逆置前的元素列表
第二行:輸出單鏈表逆置後的元素列表
輸入樣例
832 97 54 65 35 84 61 75
輸出樣例
the list is:32 97 54 65 35 84 61 75
the turned list is:75 61 84 35 65 54 97 32
解題思路:(逆置操作)
解法1:
1.如果l==null ,返回null
2.如果l!=null(以4結點的鍊錶為例)
只要把cur後的結點乙個個往前移即可
**如下:
#include
#include
#define error 0
#define ok 1
#define elemtype int
typedef
int status;
typedef
struct lnode
lnode,
*linklist;
status listinsert_l
(linklist &l,
int i, elemtype e)if(
!p || j > i-1)
return error;
// i小於1或者大於表長
s =(linklist)
malloc
(sizeof
(lnode));
// 生成新結點
s->data = e; s-
>next = p-
>next;
// 插入l中
p->next = s;
return ok;
}// linstinsert_l
status listdelete_l
(linklist &l,
int i, elemtype &e)if(
!(p-
>next)
|| j > i-1)
return error;
// 刪除位置不合理
q = p-
>next;
p->next = q-
>next;
// 刪除並釋放結點
e = q-
>data;
free
(q);
return ok;
}// listdelete_l
intinitlist
(linklist &l)
//初始化
linklist listreverse
(linklist &l)
//鍊錶逆置
return l;
}void
print
(linklist l)
printf
("\n");
}int
main()
printf
("the list is:");
print
(l);
listreverse
(l);
printf
("the turned list is:");
print
(l);
return0;
}
解法2:直接用stl中的list模板(感覺有點多餘,哈哈)
**如下:
#include
#include
using
namespace std;
void
print
(const list<
int> a)
;int
main()
cout<<
"the list is:"
;print
(a);
a.reverse()
;//逆置
cout<<
"the turned list is:"
;print
(a);
return0;
}
鍊錶就地逆置
就地逆置,就是在不借助任何中間變數的情況下,逆置一單鏈表。演算法思路 逆置後的點鍊錶初始為空,表中的節點不是新生成的,而是從原鍊錶當中一次 刪除 再逐個頭插到逆置表中。設逆置鍊錶的初始態為空表,刪除 已知鍊錶中 的第乙個節點,然後將它 插入 到逆置鍊錶的 表頭 即使得他成為逆置鍊錶中 新 的第乙個節...
鍊錶的逆置
5.鍊錶的逆置 已知head指向乙個帶頭節點的單向鍊錶,鍊錶中每個結點包含資料域和指標域。用鍊錶實現該鍊錶的逆置,並輸出。例如 輸入 5 整數表示要輸入的字元個數 abcde 輸出 edcba 注意 不允許通過改變每個節點的資料域來實現效果,必須改變鍊錶連線順序發生逆置。我寫的 如下 include...
鍊錶的逆置
剛剛除錯出來,趁熱寫一下。輸入多個整數,以 1作為結束標誌,順序建立乙個帶頭結點的單鏈表,之後對該單鏈表的資料進行逆置,並輸出逆置後的單鏈表資料。input 輸入多個整數,以 1作為結束標誌。output 輸出逆置後的單鏈表資料。sample input 12 56 4 6 55 15 33 62 ...