Commit 0bdac9d 1 parent 4bc86fc commit 0bdac9d Copy full SHA for 0bdac9d
File tree 4 files changed +177
-0
lines changed
4 files changed +177
-0
lines changed Original file line number Diff line number Diff line change
1
+ typedef struct Node {
2
+ int value;
3
+ Node* next;
4
+
5
+ Node ( int data ) {
6
+ this .value = data;
7
+ }
8
+ } Node;
9
+
10
+ Node* removeMidNode ( Node* head ) {
11
+ if ( head == NULL || head->next == NULL ) {
12
+ return head;
13
+ }
14
+ if ( head->next ->next == NULL ) {
15
+ return head->next ;
16
+ }
17
+
18
+ Node* pre = head;
19
+ Node* cur = head->next ->next ;
20
+ while ( cur->next != NULL && cur->next ->next != NULL ) {
21
+ pre = pre->next ;
22
+ cur = cur->next ->next ;
23
+ }
24
+ Node* mid = pre->next ;
25
+ pre->next = pre->next ->next ;
26
+ delete mid;
27
+ mid = NULL ;
28
+
29
+ return head;
30
+ }
31
+
32
+ Node* removeByRatio ( Node* head, int a, int b ) {
33
+ if ( a < 1 || a > b ) return head;
34
+
35
+ int len = 0 ;
36
+ Node* cur = head;
37
+ while ( cur != NULL ) {
38
+ len++;
39
+ cur = cur->next ;
40
+ }
41
+
42
+ int pos = (int )ceil ( ((double )( a * n ) ) / (double )b );
43
+ if ( pos == 1 ) {
44
+ head = head->next ;
45
+ }
46
+ else if ( pos > 1 ) {
47
+ cur = head;
48
+ while ( --pos != 1 ) {
49
+ cur = cur->next ;
50
+ }
51
+ cur->next = cur->next ->next ;
52
+ }
53
+
54
+ return head;
55
+ }
Original file line number Diff line number Diff line change
1
+ typedef struct Node {
2
+ int value;
3
+ Node* next;
4
+
5
+ Node ( int data ) {
6
+ this .value = data;
7
+ }
8
+ } Node;
9
+
10
+ Node* reverseList ( Node* head ) {
11
+ Node* pre = NULL ;
12
+ Node* next = NULL ;
13
+ while ( head != NULL ) {
14
+ next = head->next ;
15
+ head->next = pre;
16
+ pre = head;
17
+ head = next;
18
+ }
19
+
20
+ return pre;
21
+ }
22
+
23
+
24
+
25
+ typedef struct DoubleNode {
26
+ int value;
27
+ DoubleNode* next;
28
+ DoubleNode* last;
29
+ DoubleNode ( int data ) {
30
+ this .value = data;
31
+ }
32
+ } DoubleNode;
33
+
34
+ DoubleNode* reverseList ( DoubleNode* head ) {
35
+ DoubleNode* pre = NULL ;
36
+ DoubleNode* next = NULL ;
37
+ while ( head != NULL ) {
38
+ next = head->next ;
39
+ head->next = pre;
40
+ head->last = next;
41
+ pre = head;
42
+ head = next;
43
+ }
44
+
45
+ return pre;
46
+ }
Original file line number Diff line number Diff line change
1
+ typedef struct Node {
2
+ int value;
3
+ Node* next;
4
+
5
+ Node ( int data ) {
6
+ this .value = data;
7
+ }
8
+ } Node;
9
+
10
+ Node* reversePart ( Node* head, int from, int to ) {
11
+ int len = 0 ;
12
+ Node* node1 = NULL ;
13
+ Node* fPre = NULL ;
14
+ Node* tPos = NULL ;
15
+ while ( node1 != NULL ) {
16
+ len++;
17
+ fPre = len == from - 1 ? node1 : fPre ;
18
+ tPos = len == to + 1 ? node1 : tPos;
19
+ node1 = node1->next ;
20
+ }
21
+ if ( from > to || from < 1 || to > len ) return head;
22
+
23
+ node1 = fPre == NULL ? head : fPre .next ;
24
+ Node* node2 = node1->next ;
25
+ node1>next = tPos;
26
+ Node* next = NULL ;
27
+ while ( node2 != tPos ) {
28
+ next = node2->next ;
29
+ node2->next = node1;
30
+ node1 = node2;
31
+ node2 = next;
32
+ }
33
+ if ( fPre != NULL ) {
34
+ fPre ->next = node1;
35
+ return head;
36
+ }
37
+ return node1;
38
+ }
Original file line number Diff line number Diff line change
1
+ typedef struct Node {
2
+ int value;
3
+ Node* next;
4
+
5
+ Node ( int data ) {
6
+ this .value = data;
7
+ }
8
+ } Node;
9
+
10
+ Node* josephusKill ( Node* head, int m ) {
11
+ if ( head == NULL || head->next == head || m < 1 ) return head;
12
+
13
+ Node* last = head;
14
+ while ( last->next != head ) {
15
+ last = last->next ;
16
+ }
17
+ int count = 0 ;
18
+ while ( head != last ) {
19
+ if ( ++count == m ) {
20
+ last->next = head->next ;
21
+ count = 0 ;
22
+ }
23
+ else {
24
+ last = last->next ;
25
+ }
26
+ head = last->next ;
27
+ }
28
+
29
+ return head;
30
+ }
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
You can’t perform that action at this time.
0 commit comments